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

JavaScript单链表删除节点:移除值大于50的节点并优化实现

问题分析与解决方案

你的代码存在两个核心问题:

  1. 条件判断错误:你写的currentNode > 50是把Node对象和数字50比较,这永远不会得到正确结果——对象与数字比较会被转换为NaN,条件不成立,循环根本不会执行;就算改成currentNode.data >50,原逻辑也只是跳过开头大于50的节点,没有真正删除所有符合条件的节点。
  2. 未修改链表结构:你只是移动了currentNode指针,没有调整链表中节点的next指向,等于没真正删除节点,自然得不到正确的新链表。

正确实现(删除所有值>50的节点)

下面是可以正确删除节点并输出结果的代码,同时优化了链表的构建过程:

class Node {
  constructor(d) {
    this.data = d;
    this.next = null;
  }
}

class LinkedList {
  constructor(head = null) {
    this.head = head;
  }

  // 辅助方法:在链表末尾添加节点,简化构建过程
  addNode(data) {
    const newNode = new Node(data);
    if (!this.head) {
      this.head = newNode;
      return;
    }
    let current = this.head;
    while (current.next) {
      current = current.next;
    }
    current.next = newNode;
  }

  // 删除所有值大于50的节点
  removeNodesGreaterThan50() {
    // 先处理头节点:如果头节点值>50,直接替换头节点
    while (this.head && this.head.data > 50) {
      this.head = this.head.next;
    }
    if (!this.head) return; // 链表为空,直接返回

    let prev = this.head;
    let current = this.head.next;
    while (current) {
      if (current.data > 50) {
        // 删除当前节点:让前一个节点的next跳过当前节点
        prev.next = current.next;
      } else {
        // 前一个节点跟进
        prev = current;
      }
      // 当前节点继续向后遍历
      current = current.next;
    }
  }

  // 输出链表所有节点值
  printList() {
    const result = [];
    let current = this.head;
    while (current) {
      result.push(current.data);
      current = current.next;
    }
    console.log(result);
    return result;
  }
}

// 简化链表构建
const list = new LinkedList();
const values = [38,74,87,21,91,98,73,41,29,3,72,94,12,13,16];
values.forEach(val => list.addNode(val));

// 执行删除操作并输出
list.removeNodesGreaterThan50();
list.printList(); // 输出:[38, 21, 41, 29, 3, 12, 13, 16]

关于高效写法的说明

上面的实现就是最优复杂度的写法:

  • 时间复杂度:O(n),只需要遍历链表一次(处理头节点+遍历中间节点)
  • 空间复杂度:O(1),只用到了几个指针变量,没有额外开辟空间
  • 直接在原链表上修改节点指向,不需要创建新链表,是单链表删除节点的标准高效做法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:00:21