**如下:
class node(object):
def __init__(self, elem, next_=none):
self.elem = elem
self.next = next_
def reverselist(head):
if head == none or head.next==none: # 若煉表為空或者僅乙個數就直接返回
return head
pre = none
next = none
while(head != none):
next = head.next # 1
head.next = pre # 2
pre = head # 3
head = next # 4
return pre
if __name__ == '__main__':
l1 = node(3) # 建立鍊錶3->2->1->9->none
l1.next = node(2)
l1.next.next = node(1)
l1.next.next.next = node(9)
l = reverselist(l1)
print (l.elem, l.next.elem, l.next.next.elem, l.next.next.next.elem)
原始單鏈表:
反轉後單鏈表:
反轉過程如下:
第一步:next = head.next
將 head.next 賦值給 next 變數,即next 指向了節點2,先將節點2 儲存起來。
第二步:head.next = pre (初始pre==none)
將 pre 變數賦值給 head.next,即 此時節點1 指向了 none
第四步:head = next
將 next 賦值給 head,即 head 指向了節點2,此時節點2 設為「頭節點」
————————————————————————————————————————
第一次迴圈完畢,進入第二次迴圈,如下圖:
第一步:next = head.next
將 head.next 賦值給 next 變數,即 next 指向了節點3,先將節點3 儲存起來。
第二步:head.next = pre (此時的pre已經不為none)
將 pre 賦值給 head.next,pre 在上一次迴圈的時候指向了節點1,那麼這一步的意義就是節點2 指向了 節點1,完成1和2節點的反轉。
第四步:head = next
將 next 賦值給 head,即 head 指向了節點3。此時節點3 設為「頭節點」
第二次迴圈完畢,以此類推!第三次第四次第五次迴圈。最後反轉成如下圖
若干注意點:
(1)幫助記憶圖:
(2)當前頭節點的下乙個節點一定要儲存(比如:當前頭節點為2,先將節點3 儲存起來)
(3)實現反轉的key point: head.next = pre
單鏈表反轉 java版
head a b c 變成 head c b a 我們可以用迴圈的方式去實現,遍歷一次鍊錶即可。1.用乙個臨時變數tmp儲存 a的下乙個元素b,a的next指向null,即 由頭變尾 head指向null。head null a b c tmp b 2.因為此時tmp就是b,所以將tmp指向tmp的...
單鏈表反轉(帶頭結點版)
ifndef reverse list h included define reverse list h included linklist reverse list linklist head p2 linklist malloc sizeof lnode 將內容為null的p2重新分配空間 作為...
單鏈表反轉
單鏈表反轉,可以用迴圈做,當然也可以遞迴 詳見 include includestruct node 3 1 4 6 2 1 1 3 4 6 2 2 4 1 3 6 2 3 6 4 1 3 2 4 2 6 4 1 3 5 迴圈反轉,即依次改動3個指標值,直到鍊錶反轉完成 比如,上面第 1 行到第 2...