使用链表排队 ADT Java
Queue ADT using linked list Java
使用Java,我正在尝试使用循环链表编写队列 ADT(我相信我使用了正确的术语,如果我错了请随时纠正我!)。问题是,当我尝试在 Queue
class 中调用 front
方法时,它 returns 出现 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");
}
}
}
这是我的尝试(正在使用的节点 class 包含在顶部)。
我认为我的问题出在 enqueue
方法中,因为我认为我没有正确链接列表。我曾尝试在其他地方寻找类似的想法,但我没有在 Java 中找到很多我可以遵循的例子。如果有人能给我一些指示,我将不胜感激。谢谢!
public boolean isEmpty() {
return (lastNode == null);
}//End isEmpty
此方法检查是否 lastNode == null 。然而,
Node firstNode = lastNode.getNext();
如果 lastNode 不是 NULL ,lastNode.getNext() 可以是 NULL.You 在调用 lastNode.getNext() 之前应该检查一下。
使用Java,我正在尝试使用循环链表编写队列 ADT(我相信我使用了正确的术语,如果我错了请随时纠正我!)。问题是,当我尝试在 Queue
class 中调用 front
方法时,它 returns 出现 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");
}
}
}
这是我的尝试(正在使用的节点 class 包含在顶部)。
我认为我的问题出在 enqueue
方法中,因为我认为我没有正确链接列表。我曾尝试在其他地方寻找类似的想法,但我没有在 Java 中找到很多我可以遵循的例子。如果有人能给我一些指示,我将不胜感激。谢谢!
public boolean isEmpty() {
return (lastNode == null);
}//End isEmpty
此方法检查是否 lastNode == null 。然而,
Node firstNode = lastNode.getNext();
如果 lastNode 不是 NULL ,lastNode.getNext() 可以是 NULL.You 在调用 lastNode.getNext() 之前应该检查一下。