使用链接列表Java的队列ADT



使用Java,我正在尝试使用圆形链接列表编写队列ADT(我相信我使用了正确的术语,如果我错了,请随时纠正我!)。问题是,当我尝试在Queue类中调用front方法时,它会返回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");
      }
   }    
}

这是我的尝试(使用的节点类别在顶部)。我相信我的问题在于enqueue方法,因为我认为我没有正确地链接列表。我已经尝试在其他地方寻找类似的想法,但是我还没有找到很多在Java中效仿的例子。如果有人能给我一些指示,我将非常感谢。谢谢!

public boolean isEmpty() { 
        return (lastNode == null); 
    }//End isEmpty

此方法检查lastNode == null。但是,

      Node firstNode = lastNode.getNext();

如果lastNode不是null,则可以null。

最新更新