问题描述
我在处理以下代码段时遇到问题。我真的不明白为什么它不起作用,任何帮助表示赞赏。这是一个我不明白的非常非常简单的错误:
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 = 5
、 u.next.val = 1
和 u.next.next = None
解决方法
您必须在 Node
中实例化一个新的 add_node
,然后将其设置为 next
的 self
。
如果你添加一个新节点,你永远不会检查你是否在链表的中间,你只需改变当前节点的值并让 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