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

前置知识: lc0206 反转链表

Lc0092这题的的思路和206题的反转链表一样,难在操作。

先贴代码
image.png

image.png
拿上示例,来看图解

1、首先是拼接上dummy,最终返回dummy.next。(这是常规操作)
image.png

2、第一个for循环,让temp从dummy位置出发,移动到left位置的上一个节点
image.png

注意,此后temp的位置没有移动,temp很长一段时间内指向也没有变(1 -> 2)。

3、第二个for循环,操作prev和cur,一边移动位置,一边反转节点指向。

其中指向改变了(right - left)次,第二个for循环终点时prev处于right位置,cur处于right.next位置。
image.png
第二个for循环完成之后链表中各个节点的指向是下面这样的
image.png

4、重新画一下图,看一下现在的链表指向
image.png

5、temp.next.next = cur
image.png

6、temp.next = prev
image.png

已经反转完成了
image.png

返回dummy.next,完结。

同步更新到自己的语雀
https://www.yuque.com/dirackeeko/tfpe21/fsp29dvd4k9yvvpi


DiracKeeko
125 声望2 粉丝