92.反转链表-ii

2020/10/21

# Heading

    92.反转链表-ii (opens new window)

    Tags: algorithms linked-list

    Langs: c cpp csharp golang java javascript kotlin php python python3 ruby rust scala swift typescript

    • algorithms
    • Medium (51.60%)
    • Likes: 572
    • Dislikes: -
    • Total Accepted: 83.6K
    • Total Submissions: 161.8K
    • Testcase Example: '[1,2,3,4,5]\n2\n4'

    反转从位置 mn 的链表。请使用一趟扫描完成反转。

    说明:
    1 ≤ m ≤ n ≤ 链表长度。

    示例:

    输入: 1->2->3->4->5->NULL, m = 2, n = 4
    输出: 1->4->3->2->5->NULL
    /*
     * @lc app=leetcode.cn id=92 lang=javascript
     *
     * [92] 反转链表 II
     */
    
    // @lc code=start
    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} head
     * @param {number} m
     * @param {number} n
     * @return {ListNode}
     */
    var reverseBetween = function (head, m, n) {
        let dummy = new ListNode(0, head);
        let p = dummy
        n -= m
        while (p && m-- > 1) {
            p = p.next
        }
        let ppre = p //插入点
        p = p.next
        let r = p.next
        while (p && n-- > 0) {
            p.next = r.next
            r.next = ppre.next
            ppre.next = r
            r = p.next
        }
        return dummy.next
    };
    // @lc code=end
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40