例如:
輸入:2,3,4,5,none
輸出:5,4,3,2,none
步驟:1首先使用兩個指標分別指向鍊錶第乙個和第二個位置,第二指標nxt儲存第二個位置,並建立為none的result,
步驟2,將乙個元素指向result,(result的起始值為none),將result(current儲存了第乙個元素的位置)和curren(nxt已經儲存了第二個元素的位置)向後移動,完成一次調整,
下圖為,上面指標向後移動後,第二次迴圈。
實現**:
def reverse(lst):
head = lst.head
result = none
current = head.next
nxt = none
while current is not none:
nxt = current.next
current.next = result
result = current
current = nxt
head.next = result
def reverselist(self, head):
""":type head: listnode
:rtype: listnode
"""# 遞迴終止條件是當前為空,或者下乙個節點為空
if(head==none or head.next==none):
return head
# 這裡的cur就是最後乙個節點
cur = self.reverselist(head.next)
# 這裡請配合動畫演示理解
# 如果鍊錶是 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,也就是最後乙個節點
return cur
關鍵部分**:
資料結構之鍊錶反轉
鍊錶分為單向鍊錶和雙向鍊錶,無論是哪一種鍊錶,反轉都是類似的,區別主要是雙向將當前節點的last節點指向next節點。鍊錶反轉要注意的就是找到當前節點時,在進行反轉前,找到當前節點的上乙個節點和下乙個節點,這樣才能保證每一次的反轉後可以移動到下乙個節點並繼續進行操作。public class nod...
LeetCode 資料結構 反轉鍊錶
首先看題目 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?先不管什麼高階,不管黑貓白貓,只要能抓到耗子就是好貓。我們就是用最笨的方法也得把這道題給解決嘍。解決思路 首先明白我們要幹啥,反轉鍊錶...
資料結構264 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。輸入第一行為整數n n 1 代表測試鍊錶數。從第二行開始每行表示乙個鍊錶,其中第乙個資料表示鍊錶中資料個數,其餘資料表示要測試的鍊錶中的資料,均為整數。每一行對應乙個鍊錶反轉後的元素。35 1 2 3 4 5 3 2 4 5 1 35 4 3 2 1 5...