1.力扣题目:232. 用栈实现队列
解析:(辅助栈)
题目要求:仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
)
解题思路:一个栈用来作为输入的栈StackIn,一个栈用来作为输出的栈StackOut。
两个栈都是先进后出,那么先进StackIn栈的元素a,会最后压入StackOut,StackOut后进先出,a也会最先被StackOut弹出。
为了防止在输入的时候出错,每一次输入,都将所有的元素集中到StackIn中,使得StackOut中为空。
为了防止在输出的时候出错,每一次输出,都将所有的元素集中到StackOut中,使得StackIn中为空。
代码:
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public void push(int x) {
while (!stackOut.isEmpty()) {
stackIn.push(stackOut.pop());
}
stackIn.push(x);
}
public int pop() {
while (!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
return stackOut.pop();
}
public int peek() {
while (!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
return stackOut.peek();
}
public boolean empty() {
return stackOut.isEmpty() && stackIn.isEmpty();
}
}
/**
* 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();
*/