第一种
const reverseBetween = (head, left, right) => {
const dummyHead = new ListNode(-1);
dummyHead.next = head;
let prev = dummyHead;
let pos = 1;
while(pos < left) {
prev = prev.next;
pos++;
}
let cur = prev.next;
while(pos >= left && pos < right) {
const next = cur.next;
cur.next = next.next;
next.next = prev.next;
prev.next = next;
pos++;
}
return dummyHead.next;
}
第二种
const reverseList = (head) => {
let prev = null;
let cur = head;
while(cur) {
const next = cur.next;
cur.next = prev;
prev = cur;
cur = next;
}
}
const reverseBetween = (head, left, right) => {
if(!head || left === right) {
return head;
}
const dummyHead = new ListNode(-1);
dummyHead.next = head;
let prev = dummyHead;
let pos = 1;
while(pos < left) {
prev = prev.next;
pos++;
}
let rightNode = prev;
while(pos >= left && pos <= right){
rightNode = rightNode.next;
pos++;
}
let leftNode = prev.next;
let cur = rightNode.next;
prev.next = null;
rightNode.next = null;
reverseList(leftNode);
prev.next = rightNode;
leftNode.next = cur;
return dummyHead.next;
}
第三种
const reverseBetween = (head, left, right) => {
const dummyHead = new ListNode(-1);
dummyHead.next = head;
let prev = dummyHead;;
let cur = head;
let pos = 1;
while(pos < left) {
prev = cur;
cur = cur.next;
pos++;
}
const start = cur;
let tmp = null;
while(pos >= left && pos < right+1) {
const next = cur.next;
cur.next = tmp;
tmp = cur;
cur = next;
pos++;
}
prev.next = tmp;
start.next = cur;
return dummyHead.next;
}
来源