LeetCode-92-反转链表II

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起。

题目地址

题目

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

示例 1:

image.png

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

示例 2:

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

提示:

  • 链表中节点数目为 n
  • 1 <= n <= 500
  • -500 <= Node.val <= 500
  • 1 <= left <= right <= n

解题思路

2.gif

  • 找到开始反转的节点left,记录下反转的前驱节点con以及反转开始的节点(也是反转部分的尾结点)tail
  • 开始反转操作
  • 反转到right,此时反转的链表最后的一个节点(也是反转部分的头结点)为pre,后置节点cur
  • 将我们一开始记录的前驱节点con指向pre,反转部分的尾结点tail指向cur便可完成解题

解题代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var reverseBetween = function(head, left, right) {
if(!head||left == right) return head
let count = right - left +1
let vnode = new ListNode(-1,head)
let pre = vnode
let cur = pre.next
while (--left){
pre = pre.next
}
pre.next = reverseList(pre.next,count)
return vnode.next
}

var reverseList = function(head,n) {
let pre =null
let cur = head
while (n--){
[cur.next,pre,cur] = [pre,cur,cur.next]
}
head.next = cur
return pre
};
文章作者: Joker
文章链接: https://qytayh.github.io/2021/12/LeetCode-92-%E5%8F%8D%E8%BD%AC%E9%93%BE%E8%A1%A8II/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker's Blog