本题需要先了解反转链表1中如何反转链表
区别就是要再开辟两个指针。
var reverseBetween = function(head, left, right) {
let pre = null;
let current = head;
let next = head;
//先让指针跳到要反转链表部分上
for(let i=1;i<left;i++)
{
pre=current;
current=current.next;
next=current;
}
//开辟两个指针用来方便把反转完成的链表连接到本来的链表上
let current2=current;
let pre2=pre;
//反转需要反转的链表部分
for(let i=left;i<=right;i++)
{
next=current.next;
current.next=pre;
pre=current;
current=next;
}
//这里要考虑两种情况
//1.left为1表示反转部分从链表开头就开始了,需要特殊考虑
if(left>1)
{
pre2.next=pre;
}
else{
head=pre;
}
current2.next=current;
return head;
};
ES6解构赋值
性能可能下降
var reverseBetween = function(head, left, right) {
let pre = null;
let current = head;
for(let i=1;i<left;i++)
{
pre=current;
current=current.next;
}
let current2=current;
let pre2=pre;
for(let i=left;i<=right;i++)
{
//解构赋值 这时候顺序就不重要了
[current.next,pre,current]=[pre,current,current.next]
}
if(left>1)
{
pre2.next=pre;
}
else{
head=pre;
}
current2.next=current;
return head;
};