题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
思路
用stack1顺序存储入栈数据,用stack2逆向存储入栈数据,push()的时候将数据存入stack1,pop()的时候从stack2中弹出,stack2的数据的由来与条件是,当stack2为空时,遍历stack1,并且依次出栈,入stack2栈;当stack2不为空,那么就直接pop()出一个stack2中的数据。
结果
运行时间:13ms
占用内存:11176KB
代码
public void push(int node) { stack1.push(node); } public int pop() { // 仅当stack2中为空时,进行数据转移 if (stack2.isEmpty()){ while (!stack1.isEmpty()){ stack2.push(stack1.pop()); } } // 再次判断stack2,如果仍然为空,那么就抛出异常 if (stack2.isEmpty()){ throw new RuntimeException("队列中无元素"); } return stack2.pop(); }