繁体   English   中英

基本链接列表

[英]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

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

当您分配next引用时:

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

您正在更改这些节点引用的内容。

最后,更改b ,创建:

b => Node8

分配给b ,您会告诉bNode6引用Node6Node8引用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所指的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM