3 回答

TA贡献1859条经验 获得超6个赞
问题
问题是您在该add()
方法中只涵盖了 2 个案例:
列表中有零个节点。
列表中只有一个节点
如果列表中有超过 1 个节点怎么办?
假设列表中有两个节点:1 -> 2
现在,要添加3
到列表中,该方法add()
将检查. 事实并非如此,因为有 2 个元素。head
None
然后,它将简单地添加3
为next
of head
。这实际上是2
之前设置的。因此,2
丢失了,新列表是1 -> 3
解决方案
要解决此问题,您必须编辑add()
函数并检查列表中是否有超过 1 个节点。可以这样做:
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条经验 获得超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条经验 获得超8个赞
那是因为您的 add 方法并没有真正将节点添加到列表中,它只是替换了head.next值。所以你在列表中最多有 2 个节点,新值只是替换第二个位置。
这是 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 关注
- 99 浏览
添加回答
举报