第一種方法:對於乙個長度為n的單鏈表head,用乙個大小為n的陣列arr儲存從單鏈表從頭到尾遍歷的所有元素,在從arr尾到頭讀取元素簡歷乙個新的單鏈表時間消耗o(n),空間消耗o(n)
終止條件:
head.
next
.next
= head
class
solution
(object):
defreverselist
(self, head)
:"""
:type head: listnode
:rtype: listnode
"""# 遞迴終止條件是當前為空,或者下乙個節點為空
if(head==
none
or head.
next
==none):
return head
# 這裡的cur就是最後乙個節點
cur = self.reverselist(head.
next
)# 這裡請配合動畫演示理解
# 如果鍊錶是 1->2->3->4->5,那麼此時的cur就是5
# 而head是4,head的下乙個是5,下下乙個是空
# 所以head.next.next 就是5->4
head.
next
.next
= head
# 防止鍊錶迴圈,需要將head.next設定為空
head.
next
=none
# 每層遞迴函式都返回cur,也就是最後乙個節點
4. 使用棧解決
因為棧是先進後出的,實現原理就是把鍊錶節點乙個個入棧,當全部入棧完之後再乙個個出棧,出棧的時候在把出棧的結點串成乙個新的鍊錶。
參考:1、
2、3、
單鏈表的翻轉python
反轉鍊錶 輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。筆記 看到第一思路是用list做,結果一直出錯,看了高分回答不太理解,找了資料,直到找到最詳細的 部落格,感謝大神 如何把乙個單鏈表進行反轉?方法1 將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。方法3 從第2個節點到第n個節點,依次逐節點...
Python之單鏈表的翻轉
給定乙個鍊錶,將該鍊錶翻轉,並返回頭結點 鍊錶的翻轉 class node def init self,val none self.val val self.next none class linklist def init self self.head node def fanzhuan1 sel...
單鏈表翻轉
關於單鏈表的翻轉問題頗為困擾人。下面寫的程式只需遍歷每個節點一次,並且不需要構造輔助接點 通過new的方式 另外這個問題可以轉換為乙個迴圈鍊錶結構,很有意思。h struct node class cdatastruct cpp檔案 cdatastruct cdatastruct void cdat...