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

JS中mergeTwoLists函数引用传递困惑:操作l为何改变repList?

解惑:JavaScript中引用类型的赋值与操作逻辑

你困惑的核心点在于JavaScript中引用类型的赋值规则,和你理解的"值传递"不是一回事,具体解释如下:

  1. 变量存储的本质差异

    • 数字、字符串这类基本类型,变量直接存储具体的值,赋值时会复制一份值给新变量,两个变量互不影响。
    • 但ListNode实例这类对象(属于引用类型),变量存储的不是对象本身,而是指向内存中该对象的引用地址。
  2. 回到你的代码
    执行let l = repList时,并不是把repList对应的对象复制一份给l,而是把repList存储的"内存地址"复制给了l。这意味着:l和repList指向的是内存中同一个ListNode对象。

  3. 操作属性 vs 重新赋值变量

    • 当你执行l.next = list1这类操作时,是通过l的引用找到内存里的对象,修改它的next属性。因为repList指向同一个对象,所以repList的next属性会同步变化。
    • 但如果给l重新赋值(比如代码里的l = l.next),是把l的引用改成了l.next指向的新对象,此时l和repList不再指向同一个对象,后续修改l的属性就不会影响repList了。
  4. 代码逻辑的合理性
    你代码里的逻辑是成立的:用repList锚定最初的空节点,用l遍历构建链表。因为一开始对l.next的修改都作用在repList指向的对象上,最后返回repList.next就能拿到合并后的链表头节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:05:30