首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的队列列表在java中不能作为FIFO工作?

为什么我的队列列表在java中不能作为FIFO工作?
EN

Stack Overflow用户
提问于 2021-10-03 02:41:08
回答 1查看 51关注 0票数 0

我正在尝试用java实现具有双向链表的队列。我有两个方法enqueue()来添加项目,dequeue()来删除项目。我希望它是先进先出的。代码如下:

代码语言:javascript
运行
复制
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
    }
}

按顺序运行这些代码:

代码语言:javascript
运行
复制
enqueue("first"); // node1
enqueue("second"); // node2
enqueue("third"); // node3
enqueue("fourth"); // node4
System.out.println(dequeue());
System.out.println(dequeue());

将打印:

代码语言:javascript
运行
复制
fourth
third

而不是:

代码语言:javascript
运行
复制
first
second
EN

回答 1

Stack Overflow用户

发布于 2021-10-03 03:05:30

这一行

代码语言:javascript
运行
复制
firstNode = newNode;

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

你想赋值给lastnode。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69421669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档