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

Java单链表删除学生节点失败:代码运行后链表无变化

单链表删除节点无效的问题分析

你的代码存在几个关键问题,导致删除操作没有生效,逐个拆解:

  • 字符串比较方法错误:Java中==用于比较字符串时,对比的是对象的引用地址而非内容。判断姓名是否一致必须用equals()方法,示例修正:

    if (target.getStudent().getFirstName().equals(firstName) && target.getStudent().getLastName().equals(lastName))
    

    若担心空指针问题,可改用Objects.equals()做安全比较。

  • 嵌套循环逻辑完全混乱:两层循环各自遍历链表,ptr和target没有形成「前驱节点-当前节点」的对应关系,根本无法正确定位要删除节点的前驱。正确的单链表删除逻辑应该是用一个指针遍历,同时记录前驱节点,示例:

    SNode prev = null;
    SNode curr = studentsInLine;
    while (curr != null) {
        if (curr.getStudent().getFirstName().equals(firstName) && curr.getStudent().getLastName().equals(lastName)) {
            if (prev == null) {
                // 处理删除头节点的情况
                studentsInLine = curr.getNext();
            } else {
                prev.setNext(curr.getNext());
            }
            // 若只需删除第一个匹配节点,此处可加break;要删除所有匹配则继续循环
            break;
        }
        prev = curr;
        curr = curr.getNext();
    }
    
  • 遗漏头节点和尾节点的处理:

    • 外层循环从studentsInLine开始,且循环条件为ptr.getNext() != null,导致头节点本身永远不会被检查,若要删除的是第一个学生,代码完全不会处理。
    • 内层循环条件target.getNext() != null,会让最后一个节点无法进入循环,自然不会被匹配删除。
  • 匹配后无终止逻辑(可选):找到目标节点后若不跳出循环,ptr会继续向后移动,可能导致后续指针修改错误,且重复遍历完全无意义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:01:05