Python链表中node=node.next与node.next赋值的区别及next属性来源问题
链表实现问题解答
问题1:两种next相关写法的核心区别
二者的操作对象和作用完全不同:
first_node.next = second_node是修改节点实例的属性:赋值目标是节点对象本身的next属性,作用是修改链表的拓扑结构,把第一个节点的后继指针指向第二个节点,会改动链表的实际存储内容。node = node.next是修改局部临时变量的指向:node是__repr__方法内定义的遍历游标变量,这个赋值操作只是把游标从当前节点移动到下一个节点,全程不会修改链表内任何节点的属性,也不会改变链表结构。
问题2:next属性的来源
你贴出的代码只包含了链表容器类LinkedList的实现,完整的链表实现还需要配套自定义的节点类,next就是节点类的自定义实例属性,常见的节点类实现如下:
class Node: def __init__(self, data): # 存储节点数据 self.data = data # 存储后继节点的引用,默认是空 self.next = None
你在使用LinkedList时,给self.head赋值的就是Node类的实例,因此__repr__方法里遍历到的node变量都是Node类实例,可以正常调用next属性。如果self.head被赋值为不包含next属性的对象,运行时会直接抛出AttributeError。
内容的提问来源于stack exchange,提问作者LE TRINH
相关产品推荐
相关产品推荐

