python单链表无法正常工作
add方法()只打印两个值,我想打印我添加的所有数字。大小确实有效,但我不知道为什么要打印所有值时值不起作用python单链表无法正常工作,python,data-structures,Python,Data Structures,add方法()只打印两个值,我想打印我添加的所有数字。大小确实有效,但我不知道为什么要打印所有值时值不起作用 在此处输入代码 class Node(): def __init__(self,value): self.next =None self.val =value class single_linked_list(): def __init__(self): self.head =None self.size
在此处输入代码
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
def __str__(self):
vals =[]
node =self.head
while node is not None:
vals.append(node.val)
node =node.next
return f"[{','.join(str(val)for val in vals)}]"
sl=single_linked_list()
sl.add(3)
sl.add(5)
sl.add(50)
sl.add(9)
print(sl)
print(sl.size)
# it just show these value :[3,9]
#4 as size fine
这是因为add方法并不是真正地将节点添加到列表中,它只是替换
头.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链接,如果您想查看输出-,这是因为您的add方法没有真正将节点添加到列表中,它只是替换
头.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链接,如果您想查看输出-问题
问题在于,您在add()
方法中只涉及了两种情况:
1->2
现在,要在列表中添加3
,方法将检查head
是否为None
。事实并非如此,因为有两个元素
然后,它将简单地添加3
作为头部的下一个。它实际上在之前设置为2
。因此,2
丢失,新列表为1->3
解决方案
要解决此问题,必须编辑add()
函数,并检查列表中是否有多个节点。可以这样做:
def添加(self,val):
节点=节点(val)
如果self.head为无:
self.head=节点
self.size+=1
其他:
curr_node=self.head
#转到列表的最后一个元素
而curr_node.next:
curr\u node=curr\u node.next
#在最后一个元素之后添加新元素
curr_node.next=节点
self.size+=1
问题
问题在于,您在add()
方法中只涉及了两种情况:
列表中有0个节点
列表中只有一个节点
当列表中有多个节点时,情况如何?
假设列表中有两个节点:1->2
现在,要在列表中添加3
,方法将检查head
是否为None
。事实并非如此,因为有两个元素
然后,它将简单地添加3
作为头部的下一个。它实际上在之前设置为2
。因此,2
丢失,新列表为1->3
解决方案
要解决此问题,必须编辑add()
函数,并检查列表中是否有多个节点。可以这样做:
def添加(self,val):
节点=节点(val)
如果self.head为无:
self.head=节点
self.size+=1
其他:
curr_node=self.head
#转到列表的最后一个元素
而curr_node.next:
curr\u node=curr\u node.next
#在最后一个元素之后添加新元素
curr_node.next=节点
self.size+=1
@GolamRabbani很高兴知道!别忘了将它标记为正确答案,并对其进行投票,以便其他具有相同问题的程序员可以轻松找到它:)@GolamRabbani很高兴知道!别忘了将其标记为正确答案,并对其进行投票,以便其他具有相同问题的程序员可以轻松找到:)虽然这段代码可能会解决问题,但这段代码如何以及为什么会真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。虽然此代码可能会解决此问题,但如何以及为什么解决此问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。