一、初始化
java
public class MyQueue {
public static class ListNode{
ListNode next;
ListNode prev;
int val;
public ListNode(int val) {
this.val = val;
}
}
private ListNode first;
private ListNode last;
private int size;
}
使用first和last方便后续内容实现
二、判空
java
public boolean isEmpty() {
return first == null;
}
只需要判断首个节点是否为空
三、入队列
java
public void offer(int val) {
ListNode newNode = new ListNode(val);
if (first == null) {
first = newNode;
last = newNode;
}else{
last.next = newNode;
newNode.prev = last;
}
last = newNode;
size++;
}
first不动,移动last即可,除非只有一个节点,否则first永远为队头,last永远为队尾
四、peek
java
public int peek() {
if (isEmpty()) {
return -1;
}
return first.val;
}
五、出队列
java
public int pop() {
if (isEmpty()) {
return -1;
}
int x = first.val;
if(first.next == null){
first = null;
last = null;
}else{
first = first.next;
first.prev.next = null;
first.prev = null;
}
size--;
return x;
}
实际上first.prev.next = null 可以去掉因为first已经位于下一个节点,只需保证first.prev=null即可
六、size
java
public int size() {
return size;
}