2017-07-27 44 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

在'__repr__'中,當'temp.data'爲'9','temp.Next'爲'None'時,條件失敗,'9'永遠不會添加到'alist'。改變條件爲'while temp is not 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]。所以我改變了我的add

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 

我沒有問題之前打印出鏈表中的所有元素,但新的方式不打印出最後一個元素。這是我的__repr__問題,而不是add。我改變了我的__repr__。謝謝@ inspectorG4dget