92. 反转链表 II
思路
- 先找到left对应的节点,还有一起找到的是prev_head;
- 提前保存好left节点
- 然后,将left到right之间的节点反转,这里使用普通的双指针反转链表;
- left节点的next指向,后面的head节点
- 判断prev_head 是不是null , 也就是说,left是不是1
- 如果是1的话,那么result 就是new_head; 不是1的话,就是正常的,prev_head指向new_head
var reverseBetween = function(head, left, right) {
let change_len = right - left + 1;
let pre_head = null;
let result = head;
while (head && --left) {
pre_head = head;
head = head.next;
}
let modify_list = head;
let new_head = null;
while (head && change_len) {
let tmp = head.next;
head.next = new_head;
new_head = head;
head = tmp;
change_len--;
}
modify_list.next = head;
if (pre_head) {
pre_head.next = new_head;
} else {
result = new_head;
}
return result;
};