python单链表不能正常工作

添加方法()只打印两个值,我想打印我添加的所有数字。size 确实很好用,但我不知道为什么当我想打印所有值时 value 不起作用


enter code here


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 


函数式编程
浏览 82回答 3
3回答

BIG阳

问题问题是您在该add()方法中只涵盖了 2 个案例:列表中有零个节点。列表中只有一个节点如果列表中有超过 1 个节点怎么办?假设列表中有两个节点:1 -> 2现在,要添加3到列表中,该方法add()将检查. 事实并非如此,因为有 2 个元素。headNone然后,它将简单地添加3为nextof 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

九州编程

class 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

蝴蝶刀刀

那是因为您的 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
打开App,查看更多内容
随时随地看视频慕课网APP