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

Java实现链表deleteFromFront方法返回值错误该如何修复?

问题说明

我正在完成数据结构课程的项目,要求编写类实现存储int类型值的链表,具体要求如下:

  • 使用内部类实现Node节点
  • 包含要求的所有方法
  • 编写测试程序,支持按任意顺序使用任意数据测试所有方法

我需要实现public int deleteFromFront()方法,功能为删除链表头部节点,返回被删除节点存储的int值,链表为空时返回null。目前我编写的方法可以成功删除头节点,但返回值存在错误:例如链表为4 3 10 11 3 15 6 11 18 17 时,删除头节点应返回4,但我的方法返回了新头节点的值3。

错误原因

你的deleteFromFront方法逻辑顺序存在问题:
你先修改了head的指向,让它指向了新的头节点,之后才取head的value返回,自然拿到的是删除后的新头节点的值,不是被删除的旧头节点的值。
同时还存在两个隐藏bug:

  1. int是基本数据类型,无法返回null,你当前代码空链表返回-1,如果要严格符合返回null的要求,需要把返回值类型改为包装类Integer;
  2. 当链表只有一个节点时,你会把head设为null,最后执行return head.value会直接抛出空指针异常。
修复方案

符合返回null要求的版本

public Integer deleteFromFront() {
    if (head == null)
        // 空链表返回null
        return null;
    // 先保存待删除的旧头节点的值
    int deletedValue = head.value;
    if (head == tail) {
        head = null;
        tail = null;
    } else {
        head = head.nextNode;
    }
    // 返回预先保存的旧头节点值
    return deletedValue;
}

约定空链表返回-1的int版本

如果可以接受空链表返回-1作为特殊标识,不需要返回null,可以用以下版本:

public int deleteFromFront() {
    if (head == null)
        return -1;
    int deletedValue = head.value;
    if (head == tail) {
        head = null;
        tail = null;
    } else {
        head = head.nextNode;
    }
    return deletedValue;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:39:04