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

Java双向链表删除小于指定值节点:空指针异常问题及解决

解决双向链表删除小于指定值节点时的空指针异常问题

我之前在实现删除双向链表中所有数据小于给定值的节点功能时,遇到了空指针异常的问题,经过调整代码后已经正常运行,现在把问题排查和修复过程分享出来:

最初抛出空指针异常的代码

public void deleteSmaller(int data){ 
    System.out.printf("Deleting data smaller than %d",data); 
    System.out.println(""); 
    dNode current = head; 
    dNode lastCurrent; 
    lastCurrent = head.Previous; 
    dNode nextCurrent = current.Next; 
    while(current!= null){ 
        if(data>=current.data){ 
            if(current.Previous == null){ 
                nextCurrent.setPrevious(null); 
            }else{ 
                lastCurrent.setNext(nextCurrent); 
                nextCurrent.setPrevious(lastCurrent); 
            } 
        } 
        current=current.getNext(); 
        lastCurrent=current.Previous; 
        nextCurrent=current.Next; 
    } 
}

空指针异常的原因分析

  • 初始化阶段隐患:一开始直接赋值lastCurrent = head.Previous,如果链表头节点的Previous本身就是null,后续操作中使用lastCurrent就可能触发空指针。
  • 循环终止条件错误:原循环条件是current!= null,当current走到链表最后一个节点时,current.getNext()会返回null,此时执行lastCurrent=current.Previous和nextCurrent=current.Next,current已经变为null,访问其属性自然抛出空指针异常。

修正后可正常运行的代码

public void deleteSmaller(int data){ 
    System.out.printf("Deleting data smaller than %d",data); 
    System.out.println(""); 
    dNode current = head; 
    dNode lastCurrent=null,nextCurrent=current.Next ; 
    while(current.Next!= null){ 
        if(data>=current.data){ 
            if(current.Previous == null){ 
                nextCurrent.setPrevious(null); 
            }else{ 
                lastCurrent.setNext(nextCurrent); 
                nextCurrent.setPrevious(lastCurrent); 
            } 
        } 
        current=current.getNext(); 
        lastCurrent=current.Previous; 
        nextCurrent=current.Next; 
    } 
}

关键修复点

  • 初始化lastCurrent为null,避免一开始就引用可能为空的head.Previous。
  • 调整循环终止条件为current.Next!= null,确保current走到最后一个节点前就停止循环,避免后续访问null节点的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:22:49