[英]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.