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

链表中node = node.next不生效问题及递归删除节点方案咨询

问题解析与解决方案

为什么node = node.next不生效?

这是JavaScript引用类型的特性导致的:

  • 执行let node = a.next时,node变量存的是a.next这个对象的内存地址。
  • node = node.next只是把node变量里的地址换成了node.next的地址,完全没碰原链表对象a的next属性,原链表结构自然不会变。
  • 而a.next = a.next.next是直接修改了a对象的next属性,把它指向原本的下下个节点,这才真正改变了链表的结构。

递归实现链表节点删除的正确方式

递归的核心是修改链表节点的next引用,而非仅修改临时变量。以下是删除指定值节点的递归实现:

function deleteNode(head, targetValue) {
  // 递归终止条件:链表为空,直接返回null
  if (!head) return null;

  // 当前节点是要删除的,返回它的下一个节点,让上层节点的next指向这个结果
  if (head.value === targetValue) {
    return head.next;
  }

  // 递归处理下一个节点,把处理后的链表头赋值给当前节点的next
  head.next = deleteNode(head.next, targetValue);
  
  return head;
}

// 测试示例
let a = {value: 1, next: {value: 2, next: {value: 3, next: null}}};
// 删除值为2的节点
a = deleteNode(a, 2);
console.log(a); // 输出: {value: 1, next: {value: 3, next: null}}

这个逻辑能适配任意长度的链表:

  • 每次递归深入一层,处理当前节点的下一个节点
  • 找到目标节点时,返回它的下一个节点,相当于让前一个节点跳过当前节点
  • 非目标节点则把递归处理后的下一段链表挂到自己的next上,最终完成整个链表的修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:55:39