public void deleteSmaller(int data){
dNode current = head;
dNode lastCurrent;
lastCurrent = head.Previous; // (1)
dNode nextCurrent = current.Next;
while(current!= null){
if(data>=current.data){
if(current.Previous == null){
nextCurrent.setPrevious(null); // (2)
}else{
lastCurrent.setNext(nextCurrent);
nextCurrent.setPrevious(lastCurrent); // (3)
}
}
current=current.getNext();
lastCurrent=current.Previous;
nextCurrent=current.Next;
}
}
(1) If your list was empty, i.e. head
is null, calling previous
will result in an NPE.
(2) If your list has only 1 node, i.e. nextCurrent
of a head node is null, calling setPrevious
will result in an NPE.
(3) If your current
node is the last one, nextCurrent
will be null, same will occur as above.
You should do null checking before assigning or calling any of dNode's methods.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…