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

链表删除节点触发NullPointerException异常的问题排查

链表删除节点空指针异常修复方案

错误根源分析

你遇到的NullPointerException是因为removeNode方法的循环条件和遍历逻辑存在三个关键问题:

  • 循环用了||(逻辑或),当cursor已经为null时,仍会执行cursor.getNext(),直接触发空指针
  • 未处理头节点就是目标节点的场景
  • 遍历过程中没判断cursor.getNext()是否为null,可能在cursor.getNext().getData()处触发空指针

修正后的代码

public void removeNode(T data) {
    // 单独处理头节点为目标节点的情况
    if (head != null && head.getData().equals(data)) {
        head = head.getNext();
        return;
    }

    Node<T> cursor = head;
    // 循环条件:cursor非空、下一个节点存在、下一个节点数据不匹配
    while (cursor != null && cursor.getNext() != null && !cursor.getNext().getData().equals(data)) {
        cursor = cursor.getNext();
    }

    // 找到目标节点的前置节点,执行删除
    if (cursor != null && cursor.getNext() != null) {
        cursor.setNext(cursor.getNext().getNext());
    } else {
        System.out.println("Could not find node.");
    }
}

关键修正点说明

  • 头节点单独处理:如果头节点就是要删除的节点,直接将head指向头节点的下一个节点即可
  • 循环条件优化:用&&(逻辑与)确保只有cursor、cursor.getNext()都不为null,且下一个节点数据不匹配时才继续遍历,避免空指针
  • 数据匹配用equals:泛型T的对象比较不能直接用!=,要用equals方法(如果T是自定义类,需要重写equals保证匹配正确性)
  • 删除前判空:执行删除操作前,再次确认cursor.getNext()不为null,避免找不到节点时触发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:48:19