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();
*/
该文章详细介绍了如何使用两个栈来模拟一个先入先出(FIFO)的队列,包括push、pop、peek和empty等操作。在push时,将所有元素从输出栈转移到输入栈,然后将新元素压入输入栈;在pop和peek时,则将所有元素从输入栈转移到输出栈,以便进行操作。
435

被折叠的 条评论
为什么被折叠?



