206 反轉鍊錶

2022-01-26 13:47:02 字數 1187 閱讀 8421

《迴圈不變式的思想》

反轉乙個單鏈表。

示例:

輸入:1->2->3->4->5->null輸出:5->4->3->2->1->null
高階:

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

class

solution:

def reverselist(self, head: listnode) ->listnode:

pre =none

while

head:

t=head.next

head.next =pre

pre =head

head =t

return pre

遍歷head結點,用 pre 標記 head 之前的結點,用 t 標記 head 之後的結點。

head 結點 指向 pre 結點

繼續下乙個迴圈

class

solution:

def reverselist(self, head: listnode) ->listnode:

ifnot

head.next:

return

head

ans =self.reverselist(head.next)

#回溯的時候head從5回到1,這時用ans來指向它(誤)

ans.next =

head

return ans

遞迴到底,返回尾結點

回溯的時候用ans指向當前棧幀的結點

class

solution(object):

defreverselist(self, head):

if not head.next

:

return

head

ans =self.reverselist(head.next)

#回溯的時候當前棧幀的結點是head,我們把head的下乙個結點指向當前的head

head.next.next =

head

head.next =none

return ans

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 指向第乙個節點,這樣就完成了第乙個節點的逆置,以此類推就可以翻轉這個鍊...