首页 > 解决方案 > 为什么我的队列列表在 java 中不能作为 FIFO 工作?

问题描述

我正在尝试在 java 中使用双链表实现队列。我有两种enqueue()添加项目和dequeue()删除项目的方法。我希望它是先进先出。这是代码:

public void enqueue(T newEntry){ // T as generic type
    Node<T> newNode = new Node(newEntry,null,null); // Node(T element, Node prev,Node next)
    if(isEmpty()){
        firstNode = newNode;
        lastNode = newNode;
    }
    else{
        
        
        firstNode.prev = newNode;
        firstNode = newNode;
        
        numberOfElement++;
    }
}

public T dequeue(){ // remove node1
    if(isEmpty()){
        throw new NullPointerException("Queue is empty");
    }
    else{
        Node<T> node = firstNode; // get node1
        
        if(node != lastNode){ 
            
            firstNode.next.prev = null; // remove link from node2 to node1
            firstNode = node.next; // firstNode will now be node2
            node.next = null; // remove node1 link to node2
            
            numberOfElement--;
        }
        else{
            firstNode=null;lastNode=null; // first and last node reset to null
        }
        return node.element; // return element of removed node1
    }
}

按顺序运行这些代码:

enqueue("first"); // node1
enqueue("second"); // node2
enqueue("third"); // node3
enqueue("fourth"); // node4
System.out.println(dequeue());
System.out.println(dequeue());

将打印:

fourth
third

代替:

first
second

标签: javalinked-listqueuedoubly-linked-listfifo

解决方案


这条线

firstNode = newNode;

确保新添加的节点位于队列的头部,这是您肯定不想要的。

你的意思是分配给lastnode。


推荐阅读