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

为什么本地运行代码的结果与LeetCode编译器输出结果不一致?

问题原因分析
  • 最核心的原因是你混淆了操作的数据结构:你本地测试时传入的head是普通数组,代码中用到的length属性、splice方法都是数组的标准成员,可以正常执行得到去重结果。而LeetCode中「删除重复元素」的对应高频题目为链表类题目,传入的head是链表节点对象,没有length属性,外层循环for(let i = 0; i < head.length; i++)的判断条件直接不成立,函数不会执行任何逻辑就原样返回输入的头节点,所以输出和输入完全一致。
  • 代码本身存在不规范写法:splice方法的第一个参数应为数字类型的索引,你写的是head.splice([a], 1),传入了数组[a],依赖JS的隐式类型转换才能正常运行,部分严格执行环境下可能出现异常。
  • 原有数组去重逻辑存在缺陷:删除数组元素后数组长度会自动减1,但你的代码没有对内层循环的索引a做回退处理,遇到3个及以上连续重复元素时会出现去重不彻底的问题,比如输入[1,1,1]会返回[1,1],如果测试用例包含这类输入也会导致结果不符合预期。
  • 若你确认提交的是数组去重题目,另一个可能的原因是LeetCode判题逻辑要求返回新数组,不能直接修改输入的原数组,你的代码是在原数组上做修改,不符合判题规则导致结果校验不通过。
修复方案

若需求为数组去重

修复逻辑缺陷与不规范写法后的代码如下:

// 修改原数组的版本
var deleteDuplicates = (head) => {
    for(let i = 0; i < head.length; i++) {
        for(let a = i + 1; a < head.length; a++) {
            if(head[i] === head[a] ) {
                head.splice(a, 1)
                // 删除元素后索引回退,避免跳过相邻重复元素
                a--
            } 
        }
    } 
    return head;
};

若需求为LeetCode链表去重

对应操作链表的正确代码如下:

var deleteDuplicates = function(head) {
    let current = head;
    while(current && current.next) {
        if(current.val === current.next.val) {
            // 跳过重复节点
            current.next = current.next.next;
        } else {
            // 无重复则指针后移
            current = current.next;
        }
    }
    return head;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:54:02