解决思路:
两个栈stack1和stack2 。
开始时,每次添加队尾元素到stack1中。
如果需要弹出队头元素,则将stack1中的元素弹出并push到stack2中,再将stack2的栈顶元素弹出,即为弹出了队头元素。
如果stack2中是非空的,再在队尾中添加元素的时候仍然加到stack1中,从stack2中弹出队头元素。
只有当stack2为空的时候,弹出队头元素才需要将stack1中的元素转移到stack2中。
复制代码
public class MyQueue {
private Stack<Integer> pushQueue = new Stack<>();
private Stack<Integer> popQueue = new Stack<>();
public MyQueue() {
}
public void push(int num) {
pushQueue.push(num);
}
public int pop() {
if (pushQueue.isEmpty() && popQueue.isEmpty()) {
throw new RuntimeException("queue is empty!");
}
while (!pushQueue.isEmpty()) {
popQueue.push(pushQueue.pop());
}
return popQueue.pop();
}
}
复制代码
欢迎一起讨论