2016-12-15 6 views
0

このコードはどのようにリンクリストを逆に印刷しますか?私は新しいリストがどうやってこのようになるのか、とても興味があります。これは逆リンクされたリンクリストを印刷する方法

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

それぞれの新しいnl次の1のテールです:

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の回答のうちの1つを少なくとも受け入れることを検討してください。 –

答えて

0

それはないプリント逆転、逆にnlある建てはありません。だから1は2の尾であり、以下同様である。

0

最初のwhileループで何が起きているのかを考えてみましょう。それは逆の新しいリストを作ります。我々はEmptyで始まります。その後、各反復:previous_valueは、元のリストを反復しながら、値が最初の遭遇である

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

。だから、これはに拡張することができます:それは、転送リストに

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

を構築

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

そして、それとは逆方向リストは、次にリスト

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) 
関連する問題