首页 > 解决方案 > 单个基本链表

问题描述

我的疑问是当我制作 b=c.next 时,这意味着 b 将指向节点 d。但是当我从头节点开始打印时,它给出的答案是 5、6、7、8。为什么我的行 b=c.next 没有执行。答案一定是 5,8 对吧?

class Node:
def __init__(self, data):   # data -> value stored in node
    self.data = data
    self.next = None


a=Node(5)
b=Node(6)
c=Node(7)
d=Node(8)
a.next=b 
a.next.next=c 
a.next.next.next=d
b=c.next 
print(a.data,b.data,c.data)
while a is not None:
    print(a.data)
    a=a.next

标签: pythondata-structureslinked-list

解决方案


您的行b=c.next正在执行。如果你要写:

while b is not None:
    print (b.data)
    b=b.next

你会看到输出6 8。它打印b.data然后b.next.data(与 相同d.data)。

参考文献并不像您认为的那样起作用。当你创建初始节点时,你基本上有这个(=>这里的意思是“指”):

a => Node5
b => Node6
c => Node7
d => Node8

这些分配创建新节点,并使变量引用这些节点。但是a, b, c, 和d是对节点的引用,而不是节点本身。

当您分配next参考时:

Node5.next => Node6
Node6.next => Node7
Node7.next => Node8

您正在更改这些节点所指的内容。

最后,您更改b,创建:

b => Node8

当您分配给 时b,您是在告诉b,“不要指代 ,而是Node6开始指代Node8。” 但Node5.next还是指Node6

如果您想更改顺序以使其正常运行5,8,则必须编写:

a.next = c.next

另一种看待它的方法是创建一个节点和两个引用,如下所示:

a = Node(5)
b = a

现在,很明显,a.dataandb.data都将是 5。如果你写b.data = 6, thena.data也将是 6,因为aandb指的是同一件事。

但是如果你接着写会发生什么b = Node(12)?现在您所做的是创建一个新节点并b引用它。但是a仍然指的是值为 6 的节点。所以,a.data = 6b.data = 12

改变b所指的并不改变a所指的。


推荐阅读