206 反轉鍊錶

2021-10-25 03:31:34 字數 1014 閱讀 9692

反轉乙個單鏈表。

示例:

輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

高階:

你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?

設定乙個臨時結點指標tmp,用於儲存當前結點改變指向後斷開後的列表首元素,一前一後雙指標,從頭到尾移動。此方法簡單。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

return pre;}}

;

不得不說,這個方法太難理解了,只看**絞盡腦汁我都想不出來過程…

推薦去leetcode題解看此人的ppt,有遞迴的詳細過程。

這裡要注意兩點:

(1)假設鍊錶[1,2,3,4,5],最終觸發第一行返回**時,reverselist()函式返回的head是5,賦值給curr,後面每次返回的curr都是head=5這個結點。

(2)head->next->next這句,因為第5層(共5層)函式返回後,當前在第4層函式,當前head是4,所以head->next->next5->nexthead->next置空,防止鍊錶更改指向後出現迴圈鍊錶,若不置空最終遞迴反轉完成鍊錶後,新鍊錶的最後兩個節點會形成迴圈鍊錶。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

};

206 反轉鍊錶

任務描述 思路 遇到問題 修改 迴圈前判斷傳入引數是否為空 迭代時沒有考慮l3.next none的情況 實現 definition for singly linked list.class listnode def init self,x self.val x self.next none cla...

206 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 迭代就不說了,儲存當前節點的前繼節點迴圈改變指標指向就行。我自己先寫了個遞迴的,但看了題解的遞迴,一比就比下去了。class solution def reverselist self,head listn...

206 反轉鍊錶

題目 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 思路 首先,我們建立兩個新的空節點 prev 和 newhead 我們原來的第乙個節點的下乙個節點指向prev,然後再讓prev 指向第乙個節點,這樣就完成了第乙個節點的逆置,以此類推就可以翻轉這個鍊...