定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。題目示例:輸入: 1->2->3->4->5->null
輸出: 5->4->3->2->1->null
限制:0 <= 節點個數 <= 5000
本題考察的知識點就是鍊錶的反轉。
看到題目想到的解法就是雙指標。
class solution
return cur;}}
;
1、定義兩個指標:pre和cur;pre在前cur在後,初始時pre指向head,cur指向null。
2、每次讓pre的next指向cur,實現一次區域性反轉。
3、然後pre和cur同時向前移動乙個位置。
4、迴圈上述過程,直至pre到位鍊錶尾部。
在看了題解中其他人的思路後才想到這中從後往前的形式可以用遞迴來做。
class solution
};
遞迴中關鍵**就是
head->next->next = head;
head->next = null;
舉乙個例子,乙個鍊錶[1,2,3,4,5] ,分析下4和5部分的反轉。
5在if判斷部分出遞迴,進入4的遞迴呼叫中,tail=5,此時的head是4。"4->next->next = 4"分開計算,4->next 為5,4->next->next = 4 等價於5->next =4,4和5 反轉,"head->next = null"4的next指標3的遞迴呼叫中會處理所以此時先設成null。
做鍊錶的題最好在紙上自己畫畫**,這樣更清楚,理解更深。
劍指Offer 24 反轉鍊錶
定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。例 輸入 1 2 3 4 5 none 輸出 5 4 3 2 1 none 雙指標遍歷鍊錶,將當前節點的next設為前乙個節點。注意儲存當前節點的next來遍歷。時間複雜度 o n 空間複雜度 o 1 def reverse l...
劍指offer24 反轉鍊錶
定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。樣例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null思路 初始化乙個新的頭節點new head,然後用尾插法把原始鍊錶中的結點插入新的頭節點。最後return new head next.acwing 3...
劍指offer24 反轉鍊錶
定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出轉換後的頭結點。首先,從題目中可得知為單鏈表結構,只有指向下乙個元素的指標。而要完成整個鍊錶的反轉則需要將所有next指標進行反轉。定義3個指標,分別指向當前遍歷的節點 它的前乙個節點以及後乙個節點。pnode ppre pre pnode phe...