劍指offer面試16 反轉連結串列
一、題目
定義一個函式,輸入一個連結串列,反轉連結串列後,輸出反轉後連結串列的頭結點。
二、思考與分析
為了正確地反轉一個連結串列,需要調整連結串列中指標的方向,需要藉助3個指向相鄰結點的指標,因為在調整連結串列指標方向時,會使連結串列斷裂,如果不使多一個指標來記錄斷裂後的連結串列,就沒有辦法實現反轉整個連結串列的功能。
- 輸入的一個完整連結串列
- 初始化三個指標,pre指標指向null,current指標指向頭結點,pos指標指向null。
- 開始迴圈,pos指向current指標的下一個結點,在反轉連結串列的指標方向時,儲存連結串列斷開的結點,將current的指標方向反轉,指向pre指標。
- 直到pos指標指向null時,迴圈結束,此時pre指標所指向的結點,正是反轉之後連結串列的頭結點。
三、程式碼實現
提高程式碼的魯棒性,反問自己:
* 輸入的連結串列頭指標為NULL或整個連結串列只有一個結點,程式是否有處理?
* 反轉後的連結串列出現斷裂的情況,程式是否有處理?
* 返回的反轉連結串列的頭結點是否為原始連結串列的頭結點?
public ListNode ReverseList(ListNode head) {
if(head == null){
return null;
}
ListNode pre = null;
ListNode current = head;
ListNode pos = null;
while (current != null) {
pos = current.next;
current.next = pre;
pre = current;
current = pos;
if(pos == null){
break;
}
}
return pre;
}
溫馨提示:
自己多花時間找出問題並修正問題,比在面試官找出問題之後再去慌慌張張修改程式碼要好得多。
相關文章
- 劍指 Offer 24. 反轉連結串列
- 劍指 Offer 24.反轉連結串列
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- PHPer也刷《劍指Offer》之連結串列PHP
- 面試必備的「反轉連結串列」面試
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 劍指offer——連結串列中倒數第k個結點
- 劍指offer-從尾到頭列印連結串列-phpPHP
- 劍指 Offer 35. 複雜連結串列的複製
- 3. 從尾到頭列印連結串列(劍指offer)
- 劍指offer16
- 反轉連結串列
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 劍指offer-----刪除連結串列中的重複節點
- 1025 反轉連結串列
- 264反轉連結串列
- leetcode 反轉連結串列LeetCode
- 劍指offer——兩個連結串列的第一個公共結點C++C++
- java 反轉單連結串列,偶爾會遇到的面試題Java面試題
- 力扣 - 劍指 Offer 06. 從尾到頭列印連結串列.md力扣
- 面試 7:快慢指標法玩轉連結串列演算法面試(一)面試指標演算法
- leetcode 92 反轉連結串列ⅡLeetCode
- 連結串列反轉問題
- 206. 反轉連結串列
- 劍指Offer-38-兩個連結串列的第一個公共節點
- 劍指 Offer 25. 合併兩個排序的連結串列 JavaScript實現排序JavaScript
- 【劍指offer】【3】輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
- 資料結構之連結串列:206. 反轉連結串列資料結構
- 反轉連結串列、合併連結串列、樹的子結構
- 實現反轉連結串列--遞迴、迭代、雙指標、棧遞迴指標
- TypeScript 實現連結串列反轉TypeScript
- 反轉一個單連結串列。
- leetcode206. 反轉連結串列LeetCode
- 反轉連結串列系列問題
- java實現連結串列反轉Java
- leetcode 206.反轉連結串列LeetCode
- [leetcode 92] 反轉連結串列 IILeetCode
- leetcode 206. 反轉連結串列LeetCode