Skip to content
On this page

92. 反转链表 II

原题链接:LeetCode 92. 反转链表 II

题目描述

给你单链表的头指针 head 和两个整数 leftright ,其中 left 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表

示例 1:

**输入:**head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]

示例 2:

**输入:**head = [5], left = 1, right = 1 输出:[5]

提示:

- 链表中节点数目为 `n`

1 
-500 
1 

进阶: 你可以使用一趟扫描完成反转吗?

难度: Medium


题解代码

javascript
/**
 * 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) {
    // 反转链表的思路:1-2-3-4-5,先将2换到第一个,变为:2-1-3-4-5。
    // 然后将3换到第一个,3-2-1-4-5。

    const arr = []
    let p = head
    while (p) {
      arr.push(p.val)
      p = p.next
    }
    const left = arr.splice(0, m - 1)
    const right = arr.splice(n - m + 1)
    const newArr = left.concat(arr.reverse()).concat(right)
    let p1 = head
    while(p1) {
      p1.val = newArr.shift()
      p1 = p1.next
    }
    return head
};

技术文档集合