You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教:Python链表push函数中new_node.next=head_ref的作用原理

关于Python链表push函数的疑问解答

首先明确:这个push函数是在链表的头部插入新节点(头插法),这是理解所有逻辑的核心。

1. head_ref的作用

head_ref就是当前链表的头节点引用:

  • 初始时a = None,代表空链表,此时传入push的head_ref就是None;
  • 每次插入新节点后,函数会返回新的头节点引用,外部变量a接收这个值,从而始终指向链表的最新头部。

2. new_node.next = head_ref的逻辑

这行代码是头插法的关键:

  • 当插入新节点时,我们需要让新节点链接到原来的整个链表,而原来的链表入口就是head_ref(旧头节点);
  • 举个具体的执行过程:
    • 第一次调用push(a,5):此时head_ref是None,所以new_node.next = None,这意味着第一个节点(值为5)的后续没有节点,符合空链表插入第一个节点的逻辑;执行后a指向这个节点,链表状态:5 -> None。
    • 第二次调用push(a,20):此时head_ref是指向5的节点引用,new_node.next = head_ref就让值为20的新节点的next指向5的节点;随后更新head_ref为20的节点并返回给a,链表状态:20 -> 5 -> None。
    • 后续每次调用push,都是把新节点放在最前面,让它的next指向当前的链表头部,再把自己变成新的头部。

3. 第一个节点的后续指针位置

你提到的第一个节点(值为5的节点),它的next指针始终是None——因为它是第一次插入的节点,当时head_ref是None,所以new_node.next被设为None,之后再也没有被修改过。在最终的链表中,它是最后一个节点,后续自然没有其他节点。

补充:如果是尾插法会怎样?

如果你原本以为的是尾插法(在链表末尾加节点),逻辑确实不同:需要遍历找到最后一个节点,把最后一个节点的next指向新节点,新节点的next设为None。但这个代码里的push是头插法,所以逻辑是反过来的。

内容的提问来源于stack exchange,提问作者RazzcoSolutions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:24:45