Java 使用linkedlist实现队列时出现NullPointer异常

Java 使用linkedlist实现队列时出现NullPointer异常,java,queue,Java,Queue,这是一份作业。我需要使用链表实现一个队列。在为listQueue类使用enqueue方法时,我不断收到空指针异常。我不太确定发生了什么事。下面是我的主类和listQueue类 public class Driver{ public static void main(String[] args) { MyQueue<Integer> q = null; boolean useList = true; // make it false if

这是一份作业。我需要使用链表实现一个队列。在为listQueue类使用enqueue方法时,我不断收到空指针异常。我不太确定发生了什么事。下面是我的主类和listQueue类

public class Driver{

    public static void main(String[] args) {

        MyQueue<Integer> q = null;

        boolean useList = true;  // make it false if you want to array implementation

        if (useList)
            q = new ListQueue<Integer>();   // default setting: use a list to implement the queue. You can change it.
        else
            q = new ArrayQueue<Integer>();

        for(int i = 0; i < 1000; i++)  // add a large number of items onto the queue
        {
            q.enqueue(i);  
        }

        System.out.println("Now, dequeue items!");
        while(!q.isEmpty())  
        {
            System.out.print(q.dequeue() + " ");  
        }
        System.out.println("\nEnd of dequeueing");    

        // you should fully test/debug all methods!

    }

}
公共类驱动程序{
公共静态void main(字符串[]args){
MyQueue q=null;
布尔useList=true;//如果要实现数组,请将其设为false
如果(使用列表)
q=new ListQueue();//默认设置:使用列表实现队列。您可以更改它。
其他的
q=新的阵列队列();
for(int i=0;i<1000;i++)//将大量项目添加到队列中
{
q、 排队(i);
}
System.out.println(“现在,让项目出列!”);
而(!q.isEmpty())
{
System.out.print(q.dequeue()+);
}
System.out.println(“\n退出队列”);
//您应该完全测试/调试所有方法!
}
}

公共类ListQueue实现MyQueue{
私有类节点{
T item;//公共
Node next;//空
}
私有节点头=null;
私有节点tail=null;
private int size=0;//列表的大小
公共ListQueue(){}
/**
*是空的吗?
*/
公共布尔值为空(){
//您在这里的实现:
如果(大小==0){
返回true;
}//如果结束
返回false;
}//结束是空的
/**
*@返回队列中的项目数
*/
公共整数大小(){
//您在这里的实现:
返回大小;
}//端尺寸
/**
*排队:在队列末尾添加一个元素
*/
公共无效排队(T项){
//您在这里的实现:
如果(大小==0){
头=新节点();
head.item=项目;
头。下一个=尾;
大小++;
}//如果结束
否则{
Node newNode=新节点();
newNode.item=item;
tail.next=newNode;
tail=newNode;
大小++;
}//结束其他
}
/**
*出列:删除并返回队列的头部
*
*@返回已删除的值
*如果队列为空,@将抛出NoSuchElementException
*/
公共T出列(){
//您在这里的实现:
if(isEmpty()){
抛出新的NoTouchElementException();
}//如果结束
否则{
节点温度=头;
head=head.next;
大小--;
返回临时项目;
}//结束其他
}//结束排队
/**
*查看队列头而不删除它。
*
*@如果队列为空,则返回Null
*/
公共T peek(){
//您在这里的实现:
if(isEmpty()){
返回null;
}//如果结束
否则{
返回head.item;
}//结束其他
}//末端窥视
}//结束列表队列

向列表中添加一个元素后,尾部指针为空。将另一个元素添加到列表时,尝试取消引用导致错误的空指针:

tail.next = newNode;
您需要确保对于非空队列,头指针和尾指针始终指向节点。当队列大小为1时,头指针和尾指针应指向同一节点

tail.next = newNode;