java - 为什么我的队列列表在 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
解决方案
这条线
firstNode = newNode;
确保新添加的节点位于队列的头部,这是您肯定不想要的。
你的意思是分配给lastnode。
推荐阅读
- laravel - 放置在 col-4 中时提交按钮处于非活动状态,但表单在 col-8 laravel 中提交
- ngrok - x509:由未知机构签署的证书 [ ngrok ]
- android - FLUTTER:我更新到新版本后遇到了这个问题,我该如何解决
- unity3d - Unity3D:当与内置渲染管道一起使用时,后处理包期望在全屏相机上使用
- sql-server - MS-SQL - ODBC - 应用于“始终加密”的 VARCHAR(MAX) 列时插入失败
- flutter - Flutter - 小部件的状态没有改变
- regex - 正则表达式完全匹配
- firebase - Firebase:对删除规则的怀疑
- java - 如何创建提到的特定 JSON 格式
- swift - 如何修复 RealityKit/ARKit 中的“MakeRenderPipelineState failed”错误?