[英]Basic Linked List singly
我的疑问是,当我制作b = c.next时,这意味着b将指向Node 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
这些分配创建新的节点,并使变量引用这些节点。 但是a
, b
, c
和d
是对节点的引用 ,而不是节点本身。
当您分配next
引用时:
Node5.next => Node6
Node6.next => Node7
Node7.next => Node8
您正在更改这些节点引用的内容。
最后,更改b
,创建:
b => Node8
分配给b
,您会告诉b
“ Node6
引用Node6
, Node8
引用Node8
。 但是Node5.next
仍指Node6
。
如果要更改顺序以使其达到5,8
,则必须编写:
a.next = c.next
另一种查看方法是创建一个节点和两个引用,如下所示:
a = Node(5)
b = a
现在,很明显, a.data
和b.data
都将为5。如果您编写b.data = 6
,则a.data
也将为6,因为a
和b
指的是同一件事。
但是,如果您随后写b = Node(12)
什么? 现在,您完成的工作是创建一个新节点,并让b
引用它。 但是a
仍然引用值为6的节点。因此, a.data = 6
和b.data = 12
。
更改b
所指的内容不会更改a
所指的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.