Python链表节点引用赋值疑问及示例代码流程解析
Python链表疑问解析:赋值原理与代码执行流程
一、你的假设确认
你的假设完全正确。在Python中,将对象赋值给变量时,变量存储的并非对象本身,而是该对象在内存中的引用(可理解为内存地址的抽象表示)。后续通过变量操作时,都是通过这个引用找到对应的对象。
二、第18行代码L.head = n的作用
链表的head属性是整个链表的“入口标记”,用来指向链表的第一个节点。这行代码的作用就是把存储数据10的Node对象的引用赋值给L.head,相当于给链表指定了起始节点,让链表从此拥有了可访问的起点,后续所有对链表的遍历、修改操作都能通过L.head展开。
三、示例代码完整执行流程
- 定义
Node类:每个Node实例包含两个属性,data用于存储节点数据,link默认值为None,用来保存下一个节点的引用。 - 定义
SingleLinkedList类:- 初始化方法
__init__将head设为None,表示初始状态下是一个空链表; display方法用于遍历链表:如果链表为空则打印提示,否则从head开始,逐个打印节点并移动到下一个节点,直到遇到None(链表结束)。
- 初始化方法
- 创建链表实例:
L = SingleLinkedList(),此时L.head为None,链表是空的。 - 创建第一个节点:
n = Node(10),生成一个data=10、link=None的Node对象,变量n保存该对象的引用。 - 绑定链表头节点:
L.head = n,将第一个节点的引用赋值给L.head,现在链表的起始节点就是这个存储10的节点。 - 创建第二个节点:
n1 = Node(20),生成data=20、link=None的Node对象,n1保存其引用。 - 连接第一、第二个节点:
L.head.link = n1,通过L.head找到第一个节点,将它的link属性设置为第二个节点的引用,完成两个节点的串联。 - 创建第三个节点:
n2 = Node(30),生成data=30、link=None的Node对象,n2保存其引用。 - 连接第二、第三个节点:
n1.link = n2,将第二个节点的link属性设置为第三个节点的引用,三个节点形成完整的单链表。 - 调用
display方法遍历链表:- 检测到
L.head不为空,进入遍历逻辑; temp初始化为L.head(指向第一个节点);- 循环打印当前
temp(节点对象的内存标识),然后将temp更新为temp.link(下一个节点的引用); - 当
temp变为None(第三个节点的link是None)时,循环终止。
- 检测到
内容的提问来源于stack exchange,提问作者itto shura
相关产品推荐
相关产品推荐

