【LeetCode】圖解反轉連結串列 - 迭代 - 遞迴
theme: fancy highlight: a11y-dark
嗨!~ 大家好,我是YK菌 🐷 ,一個微系前端 ✨,喜歡分享自己學到的小知識 🏹,歡迎關注我呀 😘 ~ [微訊號:
yk2012yk2012
,微信公眾號:ykyk2012
]
「這是我參與11月更文挑戰的第6天,活動詳情檢視:2021最後一次更文挑戰」
今天來一道特別經典也是特別高頻的題,反轉連結串列。我們分別使用遞迴與非遞迴的方式來解決這道題,但是這裡遞迴的方式比較難理解,需要好好思考,可以幫助我們剛好的瞭解遞迴的思想
206. 反轉連結串列
給你單鏈表的頭節點
head
,請你反轉連結串列,並返回反轉後的連結串列。
【解法一】非遞迴
這裡是反轉連結串列不是反轉陣列,所以我們直接修改結點之間的指標就可以實現反轉連結串列的操作了!
舉一個連結串列的例子:3 -> 2 -> 1
,我們先反轉前兩個結點的指標關係,得到 3 <- 2 -> 1
, 此時我們再反轉後面的指標得到 3 <- 2 <- 1
此時我們就將連結串列反轉了,順序遍歷的話就是 1 -> 2 -> 3
- 初始化
js
let prev = null;
let curr = head;
那我們現就只需要聚焦在如何改變兩個結點之間的指標即可
- 指標反轉
js
let temp = curr.next;
curr.next = prev;
-
後移指標
js prev = curr; curr = temp;
-
一次的結果
迴圈遍歷反轉所有指標即可
javascript
var reverseList = function(head) {
let prev = null;
let curr = head;
while (curr) {
let temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
return prev;
};
用一個動圖演示就是這樣 動圖連結
最後來看看結果
【解法二】遞迴
我們這樣思考,一個連結串列,如果在某個位置,後面部分都已經反轉了,那它前面部分怎麼操作
採用遞迴的方式來解題,從頭結點開始遞迴到底,遞迴出口就是最後一個結點。最後一個節點作為反轉後的頭節點。
然後就是在每一層遞迴種進行反轉的操作,動圖如下
```javascript var reverseList = function(head) { // 遞迴出口,返回最後一個節點作為反轉後的頭結點 if (head == null || head.next == null) { return head; }
// 新頭結點newHead指向尾結點,此處進入遞迴,遞迴一直到遍歷到尾結點時才會返回
const newHead = reverseList(head.next);
// 每一層遞迴操作,讓head的下一個節點指向自己【反轉】
head.next.next = head;
// head指向null。以此達到反轉的目的。
head.next = null;
return newHead;
}; ```
最後,歡迎關注我的專欄,和YK菌做好朋友~
- 從校園到職場 | YK菌的2022年中總結
- 【青訓營】月影老師告訴我寫好JavaScript的三大原則——元件封裝
- 【青訓營】月影老師告訴我寫好JavaScript原則與技巧大總結
- 2022屆秋招,從被拒到上岸 | 談談YK菌在2021年的經歷與收穫
- 【TS】快速上手(四)配置選項 - 編譯選項compilerOptions
- 【LeetCode】圖解反轉連結串列 - 迭代 - 遞迴
- 【LeetCode】最大子序和從O(N^3)到O(N) - 暴力初探 - 分而治之 - 線上處理
- 【JS】JavaScript基礎知識自我檢查大過關(第三關)函式定義與呼叫
- 【Vue】高階系列(六)Vue-cli配置代理 -demo3-GitHub使用者查詢-axios
- 【Vue】高階系列(五)元件間通訊
- 【Vue】高階系列(四)Vue模組化實戰-demo2-任務清單todoList
- 【TS】快速上手(二)型別宣告
- 【Vue】高階系列(三)Vue模組化實戰-demo1-動態評價頁面
- 【Vue】高階系列(二)Vue相關小知識
- 【Vue】高階系列(一)Vue元件定義與使用 - 非單檔案元件 - 單檔案元件 - VueComponent
- 【Vue】基礎系列(十一)Vue指令-常用內建指令-自定義指令-全域性指令-區域性指令
- 【Vue】基礎系列(九)動畫與過渡-trasition-enter-leave
- 【Vue】基礎系列(八)生命週期 - 初始化顯示 - 更新狀態 - 死亡狀態 - 父子元件
- 【Vue】基礎系列(七)v-model - 自動收集資料 - 表單資料自動更新
- 【Vue】基礎系列(六)事件處理 - 繫結監聽 - 事件修飾符 - 按鍵修飾符