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

请问我实现的双向链表remove方法是否正确?

双向链表remove方法的问题分析

你的代码能正常运行,但存在边界条件逻辑错误,会导致部分场景出现异常,具体问题和修正方案如下:

1. 错误的边界判断:range == this.length

链表的有效索引范围是 0 到 this.length - 1,当 range === this.length 时属于无效索引,应该返回undefined,但你现在会调用pop()(删除最后一个有效节点,对应索引this.length -1),这会导致用户传入无效索引时,错误地删除最后一个元素。

2. 越界判断不严谨:range > this.length

正确的越界条件应该是 range < 0 || range >= this.length——因为range === this.length已经超出了有效索引范围,原代码的判断会漏掉这个情况。

修正后的代码

调整边界条件后,正确的实现如下:

remove(range){
    if(range === 0){
        return this.shift();
    }
    else if(range === this.length - 1){ // 修正:删除最后一个元素的正确索引是length-1
        return this.pop();
    }
    else if(range < 0 || range >= this.length ){ // 修正:越界条件包含range等于length的情况
        return undefined;
    }
    else{
        const temp = this.get(range);
        const after = temp.next;
        const before = temp.prev;
        before.next = after;
        after.prev = before;
        temp.next = null;
        temp.prev = null;
        this.length--;
        return temp;
    }
}

额外注意事项

这个remove方法依赖shift()、pop()、get()三个方法的正确性:

  • shift()需要正确删除头节点,更新head指针和链表长度
  • pop()需要正确删除尾节点,更新tail指针和链表长度
  • get()需要能准确返回对应索引的节点

只要这三个方法实现无误,修正后的remove就可以正常工作。

内容的提问来源于stack exchange,提问作者Tanishq Kr. Kaushal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:40:23