3 回答

TA貢獻1859條經(jīng)驗 獲得超6個贊
問題
問題是您在該add()
方法中只涵蓋了 2 個案例:
列表中有零個節(jié)點。
列表中只有一個節(jié)點
如果列表中有超過 1 個節(jié)點怎么辦?
假設(shè)列表中有兩個節(jié)點:1 -> 2
現(xiàn)在,要添加3
到列表中,該方法add()
將檢查. 事實并非如此,因為有 2 個元素。head
None
然后,它將簡單地添加3
為next
of head
。這實際上是2
之前設(shè)置的。因此,2
丟失了,新列表是1 -> 3
解決方案
要解決此問題,您必須編輯add()
函數(shù)并檢查列表中是否有超過 1 個節(jié)點??梢赃@樣做:
def add(self,val):
node = Node(val)
if self.head is None:
self.head = node
self.size += 1
else:
curr_node = self.head
# Go to the last element of the list
while curr_node.next:
curr_node = curr_node.next
# Add new element after the last element
curr_node.next = node
self.size += 1

TA貢獻1785條經(jīng)驗 獲得超4個贊
class Node():
def __init__(self,value):
self.next =None
self.val =value
class single_linked_list():
def __init__(self):
self.head =None
self.size =0
def add(self,val):
node =Node(val)
if self.head is None:
self.head =node
self.size +=1
else:
self.head.next =node
self.size +=1

TA貢獻1801條經(jīng)驗 獲得超8個贊
那是因為您的 add 方法并沒有真正將節(jié)點添加到列表中,它只是替換了head.next值。所以你在列表中最多有 2 個節(jié)點,新值只是替換第二個位置。
這是 add 方法的固定代碼:
def add(self,val):
node =Node(val)
if self.head is None:
self.head =node
self.size +=1
else:
currentNode = self.head
while currentNode.next:
currentNode = currentNode.next
currentNode.next = node
self.size += 1
這是一個 Repl.it 鏈接,如果您想查看輸出 - https://repl.it/repls/RewardingVengefulTask
- 3 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報