题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
思路
这道题时用两个栈实现一个队列,首先明确一下栈和队列的特性:
- 栈:后进先出。
- 队列:先进先出。
知道特点之后就好办了,用两个栈,现将所有元素压入 栈1 中,然后在从 栈1 中弹出并压入 栈2 中就可以实现 队列了。就是下面这样婶儿的。
我们想要 A - B - C,先进先出,那么可以先将 ABC,按序压入到 栈1,压入之后的顺序是 C - B - A。然后在从 栈1 弹出并压入到 栈B,压入之后的顺序是 A - B - C,这就实现了 先进先出了。
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() { // 当 栈2 不为空时,直接弹出栈定的元素就行 if (!stack2.isEmpty()) { return stack2.pop(); } else { // 如果栈2 为空,则先将 栈1 的所有元素压入到 栈 2 中。 while (!stack1.isEmpty()) { stack2.push(stack1.pop()); } // 弹出栈2 顶端的元素 return stack2.isEmpty() ? -1 : stack2.pop(); } } }
最后
好啦,这就是两个栈实现一个队列的方法,这道题还是蛮简单的,但是面试的时候缺会经常出现,大家不要掉以轻心。
大家可以去 【牛客网-题库-在线编程】去练习一下。
可以去微信搜索:【蘑菇睡不着】交个朋友~
也可以扫描下方二维码。