class CQueue {
Deque<Integer> d1 = new LinkedList<>();
Deque<Integer> d2 = new LinkedList<>();
public CQueue() {
}
//deque模拟栈
//入栈的方法:push(),addFirst(),想象成栈,每次入栈都会在栈顶插入数据
//出栈的方法:pop(),removeFirst()返回的数据是出站的数据,也是想象成栈,从栈顶删除数据
//deque模拟队列
//进队列方法:offer(),addLast()想象队列,从左边进右边出,从左边插入
//出队列的方法:pop(),removeFirst()
public void appendTail(int value) {
d1.push(value); //只是把数据存进去
}
public int deleteHead() {
if (!d2.isEmpty()) { //如果d2中有值,那么直接从栈的头移除
return d2.pop();
} else { //如果d2没有值,需要判断
if (d1.isEmpty()) { //如果d1也没有值,说明没有元素了,返回-1
return -1;
} else {//如果d1有值,需要把d1中的值放入到d2中,再删除d2的头部
while(!d1.isEmpty()) {
d2.push(d1.pop());
}
return d2.pop();
}
}
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/
Deque的方法参考:
https://blog.csdn.net/onedegree/article/details/108295374