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

合并两个有序链表时dummy节点(out)的更新逻辑是什么?

问题原因核心:Python自定义类实例的引用传递特性

你没有直接修改out变量但它的内容发生了变化,本质是因为ListNode是自定义类,它的实例属于可变引用类型,操作过程中temp和out指向了内存中同一个节点对象。

具体执行过程拆解:

  1. 执行out = ListNode(-1)时,内存中会创建一个val为-1的ListNode实例,out变量存储的是这个实例的内存地址,而非实例本身的副本。
  2. 执行temp = out时,没有生成新的ListNode实例,只是让temp也存储了同一个哨兵节点的内存地址,二者是同一个对象的两个别名:修改temp指向对象的属性,等价于修改out指向对象的属性。
  3. 循环过程中你操作的是temp.next属性,本质就是在拼接out对应的哨兵节点的后续链路:
    • 第一次循环判断两个链表头值都是1,走else分支执行temp.next = l2,此时out指向的哨兵节点的next就被赋值为l2的第一个值为1的节点,之后执行temp = temp.next,temp会移动到刚接上的1这个节点的位置,out始终停留在哨兵节点的位置没有变化。
    • 后续每次循环都是修改当前temp指向节点的next属性,将l1或l2的节点接入链路,再把temp向后移动一位,整个过程没有修改out本身的指向,但哨兵节点的后续链路已经被逐步拼接完成。
  4. 最后打印out时,会递归打印从哨兵节点开始的所有后续节点,就是你看到的完整合并链表。

补充说明:你当前的代码漏了剩余节点的拼接逻辑,循环结束后如果l1或l2还有未遍历的节点,需要加一行temp.next = l1 if l1 else l2才能把剩余部分接入最终链表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:24:05