使用Java,我正在尝试使用循环链表编写队列ADT(我相信我使用了正确的术语,如果我错了,请随时纠正我!)。问题是,当我尝试在front
类中调用Queue
方法时,它会返回NullPointerException
错误。
class Node
{
private Object item;
private Node next;
public Node(Object newItem) {
item = newItem;
next = null;
} // end constructor
public Node(Object newItem, Node nextNode) {
item = newItem;
next = nextNode;
} // end constructor
public void setItem(Object newItem) {
item = newItem;
} // end setItem
public Object getItem() {
return item;
} // end getItem
public void setNext(Node nextNode) {
next = nextNode;
} // end setNext
public Node getNext() {
return next;
} // end getNext
} // end class Node
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public class Queue {
protected Node lastNode;
Queue(){
lastNode = null;
}//End default constructor
public boolean isEmpty() {
return (lastNode == null);
}//End isEmpty
public void dequeueAll() {
//Deletes the full queue since the pointer goes nowhere
lastNode = null;
}
public void enqueue(Object item) {
Node newNode = new Node(item);
if ( isEmpty() )
lastNode = newNode;
else
lastNode.setNext(newNode);
}
public void dequeue() {
if ( !(isEmpty()) )
lastNode.setNext(lastNode.getNext().getNext());
else
throw new QueueException("QueueException on dequeue:" + "queue empty");
}
public Object front() {
if ( !(isEmpty()) ) {
Node firstNode = lastNode.getNext();
return (firstNode.getItem());
}
else {
throw new QueueException("QueueException on front:" + "queue empty");
}
}
}
这是我的尝试(正在使用的Node类包含在顶部)。
我相信我的问题在于enqueue
方法,因为我认为我没有正确地链接列表。我曾尝试在其他地方寻找类似的想法,但我还没有找到许多我可以在Java中遵循的例子。如果有人能给我一些指示,我会非常感激。谢谢!
答案 0 :(得分:0)
public boolean isEmpty() {
return (lastNode == null);
}//End isEmpty
此方法检查lastNode == null。然而,
Node firstNode = lastNode.getNext();
如果lastNode不为NULL,则lastNode.getNext()可以为NULL。您应该在调用lastNode.getNext()之前检查它。