Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从双链接列表中删除小于给定值(java)的所有节点_Java_Data Structures - Fatal编程技术网

从双链接列表中删除小于给定值(java)的所有节点

从双链接列表中删除小于给定值(java)的所有节点,java,data-structures,Java,Data Structures,我想删除所有小于给定数据的节点的数据 但它一直抛出空指针异常 问题解决了,但我自己尝试过更新,现在运行良好。下面的代码运行良好 public void delete更小(int数据){ dNode电流=水头; dNode电流; lastCurrent=头。上一个;//(1) dNode nextCurrent=当前。下一步; while(当前!=null){ 如果(数据>=当前数据){ if(current.Previous==null){ nextCurrent.setPrevious(nul

我想删除所有小于给定数据的节点的数据 但它一直抛出空指针异常

问题解决了,但我自己尝试过更新,现在运行良好。下面的代码运行良好

public void delete更小(int数据){
dNode电流=水头;
dNode电流;
lastCurrent=头。上一个;//(1)
dNode nextCurrent=当前。下一步;
while(当前!=null){
如果(数据>=当前数据){
if(current.Previous==null){
nextCurrent.setPrevious(null);/(2)
}否则{
lastCurrent.setNext(nextCurrent);
nextCurrent.setPrevious(lastCurrent);//(3)
}
}
current=current.getNext();
lastCurrent=当前。上一个;
nextCurrent=current.Next;
}
}
(1) 如果列表为空,即
head
为空,则调用
previous
将导致NPE

(2) 如果列表只有1个节点,即头节点的
nextCurrent
为空,则调用
setPrevious
将导致NPE

(3) 如果
current
节点是最后一个节点,
nextCurrent
将为空,如上所述


在分配或调用任何dNode方法之前,您应该执行空检查。

您正在检查前一个节点是否为空,这很好,因为当前节点可以是头节点,但当当前节点是尾节点(即链接列表中的最后一个节点)时又如何?您还需要检查下一个节点是否为空,以及当前节点是否是列表中唯一需要删除的节点(即下一个和上一个节点是否为空)


只需检查while循环后的最后一个节点,“但它一直抛出异常”=>我们应该猜到吗?还是什么?那个么循环的目的是什么@AngelKohnull指针异常精确@SeelenvirtuoseThen看,我已经完成了所有检查,但没有成功。顺便说一句,谢谢你的回答真的很有帮助。我尝试了你的代码,但现在没有删除任何节点idk为什么。但是你的回答真的很有帮助
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;
    }
}
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;
    }
}
 while(current!= null){
        
        if(data >= current.data){
            if (current.Next == null && current.Previous == null)
            {
                current = null;
                break;
            }

            if(current.Previous == null){
               nextCurrent.setPrevious(null);
            }else if(current.Next == null){
               previousCurrent.setNext(null);
            }else{
            lastCurrent.setNext(nextCurrent);
            nextCurrent.setPrevious(lastCurrent);
            
           }
        }
       current=current.getNext();
       lastCurrent=current.Previous;
       nextCurrent=current.Next;
    }