題目描述
反轉乙個單鏈表。
示例:
輸入: 1->2->3->4->5->null
輸出: 5->4->3->2->1->null
高階:
你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?
題解:法一:
迭代。使用乙個前驅節點,儲存每個節點的前乙個節點,然後依次將每個節點的next
指向前驅節點即可。
時間複雜度:o(n
)o(n)
o(n)
額外空間複雜度:o(1
)o(1)
o(1)
/**
* definition for singly-linked list.
* struct listnode
* listnode(int x) : val(x), next(nullptr) {}
* listnode(int x, listnode *next) : val(x), next(next) {}
* };
*/class
solution
return pre;}}
;/*記憶體:7.9mb,擊敗:97.60%
*/
法二:
遞迴。將head->next
部分反轉,然後將head
接在後面。需要返回新鍊錶的頭節點,也就是原鍊錶的尾節點。
時間複雜度:o(n
)o(n)
o(n)
額外空間複雜度:o(n
)o(n)
o(n)
/**
* definition for singly-linked list.
* struct listnode
* listnode(int x) : val(x), next(nullptr) {}
* listnode(int x, listnode *next) : val(x), next(next) {}
* };
*/class
solution};
/*記憶體:8.3mb,擊敗:38.87%
*/
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 指向第乙個節點,這樣就完成了第乙個節點的逆置,以此類推就可以翻轉這個鍊...