题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
思路
- 执行push操作时,直接push到stack1中去;
- 执行pop操作时,先把stack1的数字全部pop出来并push到stack2中去,
- 最后一个从stack1中pop出的数字,即第一个从stack2中pop出来的数字,就是我们最先push入stack1的数字,返回该数字;
- 重点在于:为了实现了先进先出的原则,且不影响后续的操作,我们在执行pop操作时只要求输出一个数字,其他的不变;
- 所以又要把所有的存在stack2的数字全部pop出来再push到stack1中去,等待下一次pop,或者push操作。
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() { while (!stack1.isEmpty()){ stack2.push(stack1.pop()); } int ans = stack2.pop(); while (!stack2.isEmpty()){ stack1.push(stack2.pop()); } return ans; } }