LinkedList 的错误实现

问题描述

我在处理以下代码段时遇到问题。我真的不明白为什么它不起作用,任何帮助表示赞赏。这是一个我不明白的非常非常简单的错误

class Node():
    def __init__(self,val = 0,next_node = None):
        self.val = val
        self.next = next_node

    def add_node(self,new_val):
        temp = self
        self.val = new_val
        self.next = temp

if __name__ == '__main__':
    u = Node(1)
    u.add_node(5)
    print(u.next.val)

打印 5,如果你写 u.next.next.next.val,它会一直打印 5,我想要的是 u.val = 5u.next.val = 1u.next.next = None

解决方法

您必须在 Node 中实例化一个新的 add_node,然后将其设置为 nextself

,

如果你添加一个新节点,你永远不会检查你是否在链表的中间,你只需改变当前节点的值并让 if 将自身作为下一个(=> 循环自指向列表)。这没有任何意义。

您需要:

  • 创建一个新节点,设置其值并将其 next_node 设置为您自己的 self.next
  • 然后将您的 self.next 设置为新节点

def add_node(self,new_val):
    # self.next is either None or the remainder of your linked list
    new_node = Node(new_val,self.next)
    # insert as next node of yourself
    self.next = new_node

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...