为了账号安全,请及时绑定邮箱和手机立即绑定

python单链表不能正常工作

python单链表不能正常工作

Go
函数式编程 2022-12-26 09:59:05
添加方法()只打印两个值,我想打印我添加的所有数字。size 确实很好用,但我不知道为什么当我想打印所有值时 value 不起作用enter code hereclass Node():    def __init__(self,value):        self.next =None        self.val =valueclass 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 
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

问题

问题是您在该add()方法中只涵盖了 2 个案例:

  1. 列表中有零个节点。

  2. 列表中只有一个节点

如果列表中有超过 1 个节点怎么办?

假设列表中有两个节点:1 -> 2

现在,要添加3到列表中,该方法add()将检查. 事实并非如此,因为有 2 个元素。headNone

然后,它将简单地添加3nextof 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


查看完整回答
反对 回复 2022-12-26
?
九州编程

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


查看完整回答
反对 回复 2022-12-26
?
蝴蝶刀刀

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


查看完整回答
反对 回复 2022-12-26
  • 3 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信