【问题标题】:Why is my queue list not working as FIFO in java? [closed]为什么我的队列列表在 java 中不能作为 FIFO 工作? [关闭]
【发布时间】:2023-04-06 20:45:01
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 您将新节点放在开头,并从头开始删除节点。一个队列添加到一端并从 另一端 端拉

标签: java linked-list queue doubly-linked-list fifo


【解决方案1】:

这一行

firstNode = newNode;

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

你的意思是分配给 lastnode。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多