Python 3:指向链表中下一个节点的引用/指针背后的语法逻辑



我正在学习Python 3中的链表。这是一个代码片段(不是我的):

Class Node:
def __init__(self, data = None):
self.data = data
self.next_node = None
Class LinkedList:
def __init__(self):
self.head = Node()
def add(self, data):
new_node = Node(data)
current_node = self.head
while current_node.next_node != None:
do something...

我不太明白的是while current_node.next_node != None:的部分

这是否是一个实例变量使用的情况,就像应用于另一个变量的某种函数一样?当next_node初始化为None时如何应用它?我将链表背后的逻辑理解为数据结构,但我不理解语法背后的逻辑。

编辑: 谢谢大家的回答!我意识到我对我真正想知道的东西还不够清楚。代码片段只是一个片段,我让其余代码按预期工作(不要介意这篇文章中的错误缩进)。

我无法理解的是current_node.next_node如何从当前节点转到下一个节点。我了解什么是做什么,但不了解它是如何做的。实际的底层结构/原理是什么?指针实际上是如何分配给第一个元素的?

希望它更有意义,我对行话不太熟悉。

current_node只是 Node 对象的一个实例,并且next_node作为属性。 在这里,我们有一个带有 head 的 linkedList,在 add(self, data) 函数中,我们使用相应的数据构建一个new_node,然后你分配一个指向 linkedList 的第一个元素(即 current_node)的指针并开始迭代你的列表。

以及当next_node初始化为 None 时如何应用它

在您的代码中next_node是 None 但情况并非总是如此! 和添加功能可以按如下方式完成:

while current_node.next_node != None:
current_node = current_node.next_node
current_node.next_node = new_node

在您提到的代码段中,单向链表从头到尾进行搜索,该列表由None标记为字段的值next。它是一个字段(变量是对象的一部分)而不是函数。

带有while current_node.next_node != None:的部分只是一个寻找链表末尾的循环。

你用self.next_node = None初始化你的列表,这意味着列表是空的。

然后,当您add一个元素时,您会遍历列表中的每个元素以找到需要放置它的位置。当你找到值None时,它是列表的末尾,这是你必须放置新元素的地方。(假设没有元素作为值None)。

这里next_node只是类节点的一个字段

最新更新