2016-12-15 44 views
0

這段代碼如何打印一個鏈接表反轉?我很好奇新的列表如何以這種方式出現。這是怎麼打印一個反向鏈表

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 
+0

嘿它是零票區這裏。考慮至少接受下面534個答案之一。 –

回答

0

它不打印逆轉,nl內置逆轉:

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

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

0

想想第一個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)...))) 
0

它建立一個轉發列表

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)