显示链表数据时出错(缺少最后一个值)

问题描述:

我正在执行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考虑发布一个答案或删除你的问题:) –

为了清楚起见,我的原始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