显示链表数据时出错(缺少最后一个值)
问题描述:
我正在执行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
方法吗? 在此先感谢!
答
为了清楚起见,我的原始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
在'__repr__'中,当'temp.data'为'9','temp.Next'为'None'时,条件失败,'9'永远不会添加到'alist'。改变条件为'while temp is not None' – inspectorG4dget
我以为我的'add'是错误的。谢谢 – jaykodeveloper
@Jay考虑发布一个答案或删除你的问题:) –