簡體   English   中英

這如何打印反向鏈接列表

[英]How does this print a reversed linked list

這段代碼如何打印反向鏈接列表? 我很好奇新清單是如何出現的。

class Empty:
    def __init__ (self):
        self.IsEmpty = True
Empty = Empty()

class Node:
    def __init__ (self,value,tail):
        self.IsEmpty = False
        self.value = value
        self.tail = tail

l = Node(1,Node(2,Node(3,Node(4,Empty))))   


c = l
nl = Empty

while not l.IsEmpty:
    nl = Node(l.value,nl)
    l = l.tail

while not nl.IsEmpty:
    print(nl.value)
    nl = nl.tail

它不打印逆轉, nl 逆轉:

while not l.IsEmpty:
    nl = Node(l.value,nl)
    l = l.tail

每個新的nl是下一個的尾部。 所以1是2的尾巴,依此類推。

想想第一個while循環中發生了什么。 它會反向建立一個新列表。 我們從Empty開始。 然后每次迭代:

new_list = Node(l.current_value, Node(l.previous_value))

其中previous_value是遍歷原始列表時首先遇到的值。 因此,可以將其擴展為:

Node(l.last_value, Node(l.second_to_last, Node(...Node(l.first_value, Empty)...)))

它建立一個轉發列表

l = Node(1,Node(2,Node(3,Node(4,Empty))))   

然后從該轉發列表構建一個向后列表

nl = Empty

while not l.IsEmpty:
    nl = Node(l.value,nl)
    l = l.tail

然后按順序打印該列表,這與第一個列表相反。

這是一種非常復雜的處理方式。 最好是遞歸的,例如:

def printer(curr):
    if curr.isEmpty:
        return
    printer(curr.tail)
    print(curr.value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM