92. 反转链表 II
摘要
Title: 92. 反转链表 II
Categories: 链表
Powered by:NEFU AB-IN
92. 反转链表 II
题意
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
思路
203 反转链表的升级版
https://www.bilibili.com/video/BV1sd4y1x7KN/?spm_id_from=333.999.0.0&vd_source=c2be79bc3abc8c9584470d3fed5d994e
反转链表需要三个节点: pre, cur, nxt
- 此题需要创建一个虚拟头节点dummy(要学会这么使用),它的next指向head。这样做的好处是即使left是1(即从头节点开始翻转),也能统一处理,不需要额外判断特殊情况。
- 通过循环将p0移动到第left-1个节点。此时,p0.next就是需要翻转的起点节点。
- 一开始pre为None,cur为翻转链表的起点 (p0.next)
- 在right-left+1次循环中,逐个翻转cur节点的next指针,使得当前节点指向前一个节点pre。每次循环中,cur变成下一个节点,pre变成当前节点,这样逐步翻转整个子链表。
- 翻转结束后,cur指向原来right之后的节点,pre指向原来right节点。
- 通过p0.next.next = cur,将翻转后的子链表连接到原来链表中right之后的部分。通过p0.next = pre,将原来链表中left之前的部分连接到翻转后的子链表。
代码
1 | class ListNode: |