【路飞】leetcode 92 反转链表

131 阅读1分钟

解法一: 头插法

思路:假设现在有链表[1,2,3,4,5,6],从2,4处反转,left = 2, right = 4

第一步:创建一个虚拟头节点virDom = -1,并让他的下一个节点指向head,创建前一个节点,初始值为-1, 遍历走到待反转处停下prev = 1, cur = 2

第二步,当前节点为前一个节点的下一个节点,遍历right - left次,循环时记录下一个节点next,想让当前节点,指向下一个节点的下一个节点2 -> 4, 再让下一个节点的下个节点指向pre.next, pre的下一个节点指向next 结果依次为

[1,3,2,4,5,6]
[1,4,3,2,5,6]

要点:每次取当前节点的下一个节点,插到pre的后面

var reverseBetween = function(head, left, right) {
    let virmDom = new ListNode(-1)
    virmDom.next = head
    let pre = virmDom
    for(i = 0; i < left - 1; i++) {
        pre = pre.next
    }
    let cur = pre.next
    for (let j = 0; j < right - left; j++) {
        let next = cur.next
        cur.next = next.next
        next.next = pre.next
        pre.next = next
    }
    return virmDom.next
};