我对java很新,我的双向链表addFront方法和addRear方法工作正常,但只有dequeue方法不起作用。在main方法中,我使用dequeueFront ()
方法进行测试以删除前元素,当我删除前面元素时,它可以工作,但是如果我继续删除前面元素,
Exception in thread "main" java.lang.NullPointerException
at DoublyLinkedDeque.dequeueFront(DoublyLinkedDeque.java:97)
出来了,
Line97是frontNode.previous=null
我只是想知道如何正确地从双链表中删除前元素。
public E dequeueFront() throws NoSuchElementException
{
if(frontNode!=null)
{
E frontElement=frontNode.element;
frontNode=frontNode.next;
frontNode.previous=null;
frontNode.next=null;
numElement--;
if(numElement==0)
rearNode=null;
return frontElement;
}
else
throw new NoSuchElementException();
}
答案 0 :(得分:0)
frontNode=frontNode.next;
如果frontNode之后没有下一个,则frontNode.next返回null。
如果frontNode为null,则尝试执行:
frontNode.previous=null;
将抛出空指针异常,因为如何从不存在的节点访问上一个节点?如果不考虑如何使其与您的实现一起工作,只需进行空检查就可以阻止这种情况发生。
if(frontNode != null){
frontNode.previous = null;
}
您必须使用“.next”同时检查
或者,也许您可以检查numElements是否为1.我会让您考虑如何解决该问题。
答案 1 :(得分:0)
看起来应该更像
public E dequeueFront() throws NoSuchElementException {
if(frontNode!=null)
{
E frontElement=frontNode.element;
N oldFront = frontNode ;
frontNode=oldFront.next; // frontNode may now be null
if( frontNode != null ) frontNode.prev=null; // remove link to oldFront
oldFront.previous=null; // should be unessary
oldFront.next = null ;
numElement--;
if(numElement==0)
rearNode=null;
return frontElement;
}
else
throw new NoSuchElementException();
}