【剑指offer】用两个栈实现队列
用两个栈实现队列
http://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
1、思路分析
一开始没有理解题目的意思,不知道从何写起。看了别人的代码后,再来理解了题目。直接用第一个栈的push方法可以实现队列的Push操作,但按照队列先进先出的特性,此时不能直接利用第一个栈或者第二个栈的pop操作,而是在第一个栈作为入队容器的情况下,再使用第二个栈来盛放第一个栈弹出的元素,此时再对第二个栈进行pop操作,刚好是按照先进先出顺序弹出的元素。值得注意的是,进行弹出操作时,先判断第二个栈是否有元素,如果没有,在队列存在元素的情况下即第一个栈不为空时,依次进行pop、push的操作,最后返回第二个栈弹出的元素。
2、代码
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() { if(stack2.size() <= 0) { while(stack1.size() != 0) { stack2.push(stack1.pop()); } } return stack2.pop(); } }