3 回答

TA贡献1852条经验 获得超7个赞
self.tail.next = Node(value)
self.tail = Node(value)
在这里,您将同一个对象放在两个节点中,这并不是实际需要的。你需要说,现在做self.tail.next尾巴,即self.tail
因此self.tail = Node(value)改为self.tail = self.tail.next
class SLinkedList:
def __init__(self):
self.head = None
self.tail = None
def append_node(self,value):
if self.head == None:
self.head = self.tail = Node(value)
else:
self.tail.next = Node(value)
self.tail = self.tail.next
return self

TA贡献1864条经验 获得超2个赞
self.tail = Node(value)
如果您替换为,它将起作用self.tail = self.tail.next
。您当前的版本设置self.tail.next
为具有给定值的新节点,然后设置self.tail
为具有相同值的不同节点。它们需要是相同的节点才能使链表正常工作。 self.tail.next
是一个等价于的节点Node(value)
,但Node(value)
创建了一个新对象。您需要它们都是同一个对象。如果它们不是同一个对象,则它们self.tail
将是一个单独的对象,而不是链表的一部分。

TA贡献1779条经验 获得超6个赞
当self.head不为空时,append_node()正在创建两个新节点。它将一个放在next旧尾巴的链接中,然后设置self.tail到另一个。结果,self.tail指向一个实际上不在next链中的节点。所以当你稍后在它后面添加一个新节点时,它不在列表中。
将新节点分配给一个变量,然后在两个地方分配它。
def append_node(self,value):
new_node = Node(value)
if self.head == None:
self.head = self.tail = new_node
else:
self.tail.next = new_node
self.tail = new_node
return self
添加回答
举报