2017-07-27 5 views
1

私はlinked listを実装してデータ構造を研究しています。インターネットには多くの優れたリソースがありますが、リンクされたリストのデータを表示しています(最後の値がありません)

class Node: 
    def __init__(self, val=None): 
     self.data = val 
     self.Next = None 

class LinkedList: 
    def __init__(self): 
     self.head = None 
     self.size = 0 

    def __repr__(self): 
     temp = self.head 
     alist = [] 
     while temp.Next is not None: 
      alist.append(temp.data) 
      temp = temp.Next 
     return str(alist) 

    def add(self, val): 
     cur = self.head 
     prev = None 
     if cur is None: 
      self.head = Node(val) 
     else: 
      while cur is not None: 
       prev = cur 
       cur = cur.Next 
      prev.Next = Node(val) 
     self.size += 1 


if __name__ == '__main__': 
    alist = LinkedList() 
    for i in range(10): 
     alist.add(i) 
    print(alist) 

""" [0,1,2,3,4,5,6,7,8] 

私はそれが[0,1,2,3,4,5,6,7,8,9]を印刷すると予想しましたが、最後の要素が欠けています。誰でも私が私のadd方法で逃したものを教えてもらえますか? ありがとうございます!

+2

「temp.data」が「9」の場合、「temp.Next」は「なし」で条件に失敗し、「9」は決して「alist」に追加されません。 'tempがNoneではない間に条件を変更する' – inspectorG4dget

+0

私の 'add 'が間違っていると思った。 – jaykodeveloper

+0

ありがとうございました@Jay回答を投稿するか質問を削除することを検討してください:) –

答えて

0

明確にすることが、私のオリジナルadd方法は、このよう

def add(self, val): 
    temp = Node(val) 
    temp.Next = self.head 
    self.head = temp 
    self.size += 1 

だったしかし、それは要素が[9,8,7,6,5,4,3,2,1のように、順序を逆に追加します、0]。だから私は

def add(self, val): 
     cur = self.head 
     prev = None 
     if cur is None: 
      self.head = Node(val) 
     else: 
      while cur is not None: 
       prev = cur 
       cur = cur.Next 
      prev.Next = Node(val) 
     self.size += 1 

に私のaddを変えしかし私は、新しい方法は、最後の要素をプリントアウトしていない、以前にリンクされたリストの内のすべての要素をプリントアウトする問題を持っていませんでした。私の__repr__問題はaddではありませんでした。私は__repr__を変更しました。ありがとうございます@ inspectorG4dget

関連する問題