题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c120172b1be120b0da72a75b45f7e045.png)
思路
- 创建两个栈AB, 栈A负责压入数据, 栈B用来弹出数据
- 如果是入队操作, 那就直接将数据压入栈A
- 如果是出队操作, 如果栈B不为空, 那返回栈B弹出的元素, 如果栈B为空, 那就将栈A中的所有元素依次出栈并压入栈B, 再弹出B的栈顶元素
- 如果是peek操作, 如果栈B不为空, 那返回栈B栈顶元素, 如果栈B为空, 那就将栈A中的所有元素依次出栈并压入栈B, 后返回B的栈顶元素(不弹出)
动画演示
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/063205d9ee4f541cfa6cb9cd21293be3.gif)
代码
class MyQueue {
Stack<Integer> stackA = new Stack<> ();
Stack<Integer> stackB = new Stack<> ();
public MyQueue() {}
public void push(int x) {
stackA.push(x);
}
public int pop() {
if (stackB.size() != 0) {
return stackB.pop();
}
while (stackA.size() > 0) {
stackB.push(stackA.pop());
}
return stackB.pop();
}
public int peek() {
if (stackB.size() != 0) {
return stackB.peek();
}
while (stackA.size() > 0) {
stackB.push(stackA.pop());
}
return stackB.peek();
}
public boolean empty() {
return stackA.isEmpty() && stackB.isEmpty();
}
}