我正在学习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
只是类节点的一个字段