【发布时间】: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