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

链表在 2 个节点后停止,为什么?

链表在 2 个节点后停止,为什么?

陪伴而非守候 2022-11-18 14:07:02
第一次发帖在这里。我正在尝试使用下面的代码实现链表,但不知何故链表会在第二个节点之后停止。我期待 9->6->11->8->15->19->7->,但我只得到 9->6->。谁能帮我弄清楚我的代码有什么问题?谢谢!class Node:    def __init__(self,value):        self.next = None        self.val = value    def __str__(self):        return str(self.val)class SLinkedList:    def __init__(self):        self.head = None        self.tail = None    def append_node(self,value):        if self.head == None:            self.head = self.tail = Node(value)          else:            self.tail.next = Node(value)            self.tail = Node(value)        return selfllist = SLinkedList()llist.append_node(9).append_node(6).append_node(11) \.append_node(8).append_node(15).append_node(19) \.append_node(7)  print(llist.head.next.next) # returned None. Why??
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

self.tail.next = Node(value)    

self.tail = Node(value)

在这里,您将同一个对象放在两个节点中,这并不是实际需要的。你需要说,现在做self.tail.next尾巴,即self.tail


因此self.tail = Node(value)改为self.tail = self.tail.next


class SLinkedList:

    def __init__(self):

        self.head = None

        self.tail = None

    def append_node(self,value):

        if self.head == None:

            self.head = self.tail = Node(value)

        else:

            self.tail.next = Node(value)

            self.tail = self.tail.next

        return self


查看完整回答
反对 回复 2022-11-18
?
慕斯王

TA贡献1864条经验 获得超2个赞

self.tail = Node(value)如果您替换为,它将起作用self.tail = self.tail.next。您当前的版本设置self.tail.next为具有给定值的新节点,然后设置self.tail为具有相同值的不同节点。它们需要是相同的节点才能使链表正常工作。 self.tail.next 是一个等价于的节点Node(value),但Node(value)创建了一个新对象。您需要它们都是同一个对象。如果它们不是同一个对象,则它们self.tail将是一个单独的对象,而不是链表的一部分。



查看完整回答
反对 回复 2022-11-18
?
哆啦的时光机

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

当self.head不为空时,append_node()正在创建两个新节点。它将一个放在next旧尾巴的链接中,然后设置self.tail到另一个。结果,self.tail指向一个实际上不在next链中的节点。所以当你稍后在它后面添加一个新节点时,它不在列表中。


将新节点分配给一个变量,然后在两个地方分配它。


    def append_node(self,value):

        new_node = Node(value)

        if self.head == None:

            self.head = self.tail = new_node

        else:

            self.tail.next = new_node

            self.tail = new_node

        return self


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号