BM42 题解 | #用两个栈实现队列#
用两个栈实现队列
https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
解题思路:这个是我自己做出来的,其实很简单,well done!
1、队列是先进先出,类似水进出管
2、堆栈式先进后出,类似针刺订单,先进后出
利用栈的特性,就可以这样做,倒来倒去,实现用两个栈实现队列功能。
1)用 stack1保留顺序进栈功能,用于statck2顺序出栈用。
2)stack1 push时,先判断stack2有没有值,先倒回stack1,这样可以实现顺序保存
3)stack2 pop时,先判断stack1有没有值,先倒回stack2,实现按顺序弹出的功能
4) 又因为方法同一个时刻,只能有一个被调用,所以是安全的
import java.util.*; import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { while(!stack2.isEmpty()) { int data = stack2.pop(); stack1.push(data); } stack1.push(node); } public int pop() { while (!stack1.isEmpty()) { int data = stack1.pop(); stack2.push(data); } if (!stack2.isEmpty()) { return stack2.pop(); } return -1; } }