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
添加回答
舉報