我正在尝试用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
发布于 2021-10-03 03:05:30
这一行
firstNode = newNode;
确保新添加的节点位于队列的头部,这是您肯定不想要的。
你想赋值给lastnode。
https://stackoverflow.com/questions/69421669
复制相似问题