劍指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;
}
溫馨提示:
自己多花時間找出問題並修正問題,比在面試官找出問題之後再去慌慌張張修改程式碼要好得多。
相關文章
- PHPer也刷《劍指Offer》之連結串列PHP
- 劍指offer面試17 合併兩個排序的連結串列面試排序
- 劍指offer面試題15 連結串列中倒數第K個結點面試題
- 劍指Offer面試題5(Java版):從尾到頭列印連結串列面試題Java
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 劍指offer-從尾到頭列印連結串列-phpPHP
- 《劍指offer》:[37]如何得到連結串列環的入口地址
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 面試必備的「反轉連結串列」面試
- 劍指offer——兩個連結串列的第一個公共結點C++C++
- 反轉連結串列
- 劍指offer面試18 樹的子結構面試
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 劍指 Offer 25. 合併兩個排序的連結串列 JavaScript實現排序JavaScript
- 【劍指offer】左旋轉字串字串
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython
- 利用PHP實現《劍指 offer》之連結串列(資料結構與演算法實戰 )PHP資料結構演算法
- JavaScript從反轉陣列到連結串列反轉JavaScript陣列
- 【LeetCode】【連結串列】劍指 Offer 52. 兩個連結串列的第一個公共節點 思路解析和程式碼LeetCode
- 實現反轉連結串列--遞迴、迭代、雙指標、棧遞迴指標
- 【劍指offer】字串轉整數字串
- 反轉連結串列、合併連結串列、樹的子結構
- 劍指offer(java實現)第3題“從尾到頭列印連結串列”-牛客網Java
- java實現連結串列反轉Java
- leetcode 反轉連結串列LeetCode
- TypeScript 實現連結串列反轉TypeScript
- 1025 反轉連結串列
- mysql 索引十連問| 劍指 offer - mysqlMySql索引
- 【劍指offer】樹的子結構
- java 反轉單連結串列,偶爾會遇到的面試題Java面試題
- 劍指offer:刪去連結串列中重複的節點。(題解原始碼加圖解)原始碼圖解
- 面試 7:快慢指標法玩轉連結串列演算法面試(一)面試指標演算法
- 資料結構之連結串列:206. 反轉連結串列資料結構
- leetcode 92 反轉連結串列ⅡLeetCode
- 「劍指offer」27道Mybatis面試題含解析MyBatis面試題
- 《劍指offer》:[42-1]左旋轉字串字串
- 劍指offer面試題(41-50)——java實現面試題Java