反转链表二
给一个单向链表,反转链表从m-n的位置
思路一:将链表拆成两个部分。
找到要反转的起点位置,成为一个新链表,然后将反转完之后的链表和之前旧链表进行连接。
思路一:代码实现
var reverseBetween = function(head, left, right) {
if (!head) return null;
let ret = new ListNode(-1,head); // 创建一个新的链表,下一个节点就是head,
let pre = ret;
let cnt = right - left + 1; // 待反转链表的数量
while (--left) {
pre = pre.next; // 找到待反转位置的起点节点。
}
pre.next = reverse(pre.next, cnt); // 反转链表
return ret.next; //返回链表,下一位才是从head开始的原链表,第一位是虚头
};
var reverse = function(head,n){ // 接收一个链表,和待反转的个数
let pre = null;
let cur = head;
while (n--) {
[cur.next, pre, cur] = [pre, cur, cur.next]; // 反转链表1中的,指针交换位置法,交换节点位置
}
head.next = cur; //将链表连接
return pre; //返回整个反转后的链表
}