由于队列与栈具有相反的属性,所以使用两个栈的取出取入操作来实现队列。
需要注意的是,若形成队列的栈(二号栈)并没有被全部取出,在执行取出操作或查询头指针操作时需要先将二号栈全部取出再将第一个栈的元素倒入二号栈。
class MyQueue {
Stack <Integer> stack1;
Stack <Integer> stack2;
public MyQueue() {
stack1 = new Stack<>();
stack2 = new Stack<>();
}
public void push(int x) {
stack1.push(x);
}
public int pop() {
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
public int peek() {
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.peek();
}
public boolean empty() {
return stack1.empty() && stack2.empty();
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/