Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python单链表无法正常工作_Python_Data Structures - Fatal编程技术网

python单链表无法正常工作

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

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 =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()
方法中只涉及了两种情况:

  • 列表中有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
    
    问题 问题在于,您在
    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很高兴知道!别忘了将其标记为正确答案,并对其进行投票,以便其他具有相同问题的程序员可以轻松找到:)虽然这段代码可能会解决问题,但这段代码如何以及为什么会真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。虽然此代码可能会解决此问题,但如何以及为什么解决此问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。