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

Java删除链表节点时出现java.lang.NullPointerException异常如何解决?

空指针异常触发原因

  • 入参pos超过链表总长度时,while循环执行结束后temp会被赋值为null,后续直接访问temp.prev会直接抛出空指针异常
  • 头节点删除逻辑存在问题,Java是值传递,deleteAtHead(head)方法内部修改的是形参的副本,不会修改当前方法里的head引用,删除头节点后返回旧的头节点,后续对该节点的操作也会触发空指针
  • 缺失head本身为null的边界判断,传入空链表时从第一行逻辑就会触发空指针

修复方案

  1. 开头优先判断头节点是否为空,避免空链表操作异常
  2. while循环结束后增加temp非空判断,非法pos直接返回原头节点或抛出参数异常
  3. 修改头节点删除逻辑,接收deleteAtHead返回的新头节点后再返回(需保证deleteAtHead方法本身实现正确,返回删除头节点后的新头)

修复后代码示例:

public static Node deletion(Node head , int pos) {
    // 优先处理空链表边界情况
    if (head == null) {
        return null;
    }
    if(pos==1) {
        // 直接返回删除头节点后的新头
        return deleteAtHead(head);
    }
    
    Node temp=head;
    int count=1;
    while(temp!=null && count!=pos) {
        temp=temp.next;
        count++;
    }
    // 新增pos越界判断,避免空指针
    if (temp == null) {
        // 可根据业务需求替换为抛出IllegalArgumentException
        return head;
    }
    temp.prev.next=temp.next;
    if(temp.next!=null) {
        temp.next.prev=temp.prev;
    }
    return head;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 00:06:03