
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 �(�)O(n),空间复杂度 �(1)O(1)。
例如:
给出的链表为 1→2→3→4→5→NULL, m=2,n=4,
返回 1→4→3→2→5→NULL.
数据范围:链表长度 0<size≤1000,0<m≤n≤size,链表中每个节点的值满足 |val| ≤1000
要求:时间复杂度 O(n) ,空间复杂度O(n)
进阶:时间复杂度O(n),空间复杂度O(1)
示例一
输入:{1,2,3,4,5},2,4
返回值:{1,4,3,2,5}
示例二
输入:{5},1,1
返回值:{5}
测试通过答案:
/* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
function reverseBetween( head , m , n ) {
// write code here
var cur=head;
var st=[];
var count=1;
while(cur){
if(count>=m&&count<=n){
st.push(cur.val);
}
cur=cur.next;
count++;
}
cur=head;
count=1;
while(cur){
if(count>=m&&count<=n){
cur.val=st.pop();
} else {
if(count>n) break
}
cur=cur.next;
count++;
}
return head;
}
module.exports = {
reverseBetween : reverseBetween
};