單鏈表反轉 python版

2021-09-13 02:53:53 字數 2092 閱讀 5651

**如下:

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...