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

关于JavaScript链表mergeTwoLists中temp赋值逻辑的困惑

链表变量赋值逻辑解惑

为什么temp = temp.next得到的是节点对象而非单个值?

  • ListNode是JS中的对象类型,这类变量存储的不是对象本身,而是指向内存中对象的引用地址。
  • temp.next指向的是一个完整的ListNode实例(比如val为1、next指向val为2的节点),执行temp = temp.next时,只是把temp变量的引用地址改成了temp.next对应的节点地址,所以temp现在指向的是这个完整的节点对象。控制台显示的[1,2]是对链表节点的格式化展示——它会自动展开节点的next链,把后续关联的节点都列出来,但temp本身只指向val=1的那个节点。

链表变量和普通值类型变量的差异

  • 像var apple = 'apple'这类值类型(字符串、数字等原始类型),变量直接存储具体的值,赋值时是值的拷贝。
  • 链表节点属于引用类型,变量存的是对象的内存地址。temp = temp.next只是改变了temp变量的指向,并没有修改任何节点的内容——就像你手里的指针从指向A盒子改成指向B盒子,A和B盒子本身都没被改动。

结合你的代码逻辑拆解

你初始化时temp和head都指向同一个val=0的头节点:

  1. 当执行temp.next = list1时,是把val=0节点的next属性,指向了list1的第一个节点(比如val=1的节点)。
  2. 执行temp = temp.next后,temp的指向从val=0的节点切换到了val=1的节点。控制台打印这个节点时,会顺着它的next属性展开后续节点,所以显示成[1,2],但temp本身只是指向val=1的那个节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:03:31