Python链表add_last方法中for current_node in self语句含义疑问
关于可迭代的原因
Python 自定义类的实例想要支持 for...in 迭代,只要符合迭代器协议即可:类需要实现 __iter__() 方法,且该方法返回一个实现了 __next__() 方法的迭代器对象。
你贴的代码片段里虽然没写出 LinkedList 类的 __iter__ 实现,但从 add_last 的用法可以确定,原完整实现肯定包含了该方法,常见的链表迭代实现逻辑如下:
def __iter__(self): current_node = self.head # 从表头开始遍历,直到节点为None停止 while current_node is not None: yield current_node current_node = current_node.next
补充:你贴的
LinkedList代码存在一个小问题:定义了两个__init__构造方法,Python 不支持类方法重载,后面的构造方法会直接覆盖前面的,无参初始化的逻辑实际是无效的。
迭代 self 的具体含义
这里的 self 就是 LinkedList 类的实例,对它执行迭代操作,本质就是从链表的头节点 self.head 开始,按链表的 next 指针顺序,依次返回每一个 Node 节点对象,直到遍历到最后一个节点(next 属性为 None)就终止迭代。
你贴的 add_last 方法里的空 for 循环,就是利用迭代的特性遍历完整条链表,让循环变量 current_node 最终停在链表的最后一个节点上,之后把新传入的节点挂载到最后一个节点的 next 属性上,就完成了尾部插入节点的操作。
内容的提问来源于stack exchange,提问作者Arcanesaw
相关产品推荐
相关产品推荐

