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

测试Linked List的removeKFromList函数时输出与预期不符求助

问题根因

你编写的removeKFromList函数的入参要求是**ListNode类实例构成的链表头节点**,但你调用时直接传入了普通数组,两者数据结构完全不匹配,导致逻辑无法正常执行:

  • 你的链表节点自定义了value存值、next存后继节点的属性,普通数组没有对应属性
  • 函数执行时while(current.next)判断一开始就不成立,循环没有执行,直接返回了你传入的原数组,所以输出和输入没有差异

另外补充:你写的链表删除逻辑本身是正确的,用虚拟头节点的写法也兼容了头节点就是待删除值的边界场景,没有问题。

修复方案

你可以补充两个工具函数,分别实现「数组转自定义链表」和「自定义链表转数组」的能力,再调用原有删除逻辑即可得到预期结果:

function ListNode(x) {
  this.value = x;
  this.next = null;
}

// 数组转自定义链表
function arrayToList(arr) {
  if (arr.length === 0) return null;
  let head = new ListNode(arr[0]);
  let current = head;
  for (let i = 1; i < arr.length; i++) {
    current.next = new ListNode(arr[i]);
    current = current.next;
  }
  return head;
}

// 自定义链表转数组
function listToArray(list) {
  let arr = [];
  let current = list;
  while (current) {
    arr.push(current.value);
    current = current.next;
  }
  return arr;
}

function removeKFromList(l, k) {
    let node = new ListNode();
    node.next = l;
    let current = node;
    while(current.next) {
        if (current.next.value === k) {
            current.next = current.next.next
        } else {
            current = current.next;
        }
    }
    return node.next;
}

// 正确调用方式
const list = arrayToList([3, 1, 2, 3, 4, 5]);
const processedList = removeKFromList(list, 3);
console.log(listToArray(processedList)); // 输出 [1,2,4,5]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:57:04