Appearance
92. 反转链表 II
原题链接:LeetCode 92. 反转链表 II
题目描述
给你单链表的头指针 head 和两个整数 left 和 right ,其中 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
};