import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } public int pop() { /** * stack1 push5次 stack1里的顺序应该是 5 4 3 2 1 * 此时不论你stack1后续是否调用pop 但题目主题是要用2个栈实现队列 * 那么我就应该判断 只要stack1不为null 就应该把stack1里面的元素 * 5 4 3 2 1 push到 stack2中 变为 1 2 3 4 5 且前提是stack2非null * 因为如果是stack1 1 2 3 4 5 在第3次push后 调用了一次pop * 那么 stack1中 3 2 1 应该落入stack2中为 1 2 3 且只弹出了 1一个元素 * 此时stack1继续push 4 5 此时stack2中 仍有2 3在栈中 要想实现 * 队列的效果,此时stack2中在存在元素的情况下,不应再push元素,如果push * 了 stack2就变成了 4 5 2 3了 达不到题目的效果了 * 所以此时在stack2存在元素的情况下,应该仍然弹出剩下的2 3元素才可以 */ if (stack2.isEmpty()) { while (!stack1.isEmpty()) { stack2.push(stack1.pop()); } } return stack2.pop(); } }