博客 / 詳情

返回

[leetcode] 0092反轉鏈表2 js實現 圖解

/*
給你單鏈表的頭指針 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

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.