使用链表排队 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() 之前应该检查一下。