基本链表单独



我的疑问是当我制作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

您的行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

这些赋值创建新节点,并使变量引用这些节点。但是abcd都是对节点的引用,而不是节点本身。

指定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.datab.data都将是5。如果你写b.data = 6,那么a.data也将是 6,因为ab指的是同一件事。

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

更改b所指的内容不会改变a所指的内容。

相关内容

  • 没有找到相关文章

最新更新