题解 | #用两个栈实现队列#

用两个栈实现队列

http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

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() {

       /**
         * stack1 push5次 stack1里的顺序应该是 5 4 3 2 1
         * 此时不论你stack1后续是否调用pop 但题目主题是要用2个栈实现队列
         * 那么我就应该判断 只要stack1不为null 就应该把stack1里面的元素
         * 5 4 3 2 1 push到 stack2中 变为 1 2 3 4 5 且前提是stack2非null
         * 因为如果是stack1 1 2 3 4 5 在第3次push后 调用了一次pop
         * 那么 stack1中 3 2 1 应该落入stack2中为 1 2 3 且只弹出了 1一个元素
         * 此时stack1继续push 4 5 此时stack2中 仍有2 3在栈中 要想实现
         * 队列的效果,此时stack2中在存在元素的情况下,不应再push元素,如果push
         * 了 stack2就变成了 4 5 2 3了 达不到题目的效果了
         * 所以此时在stack2存在元素的情况下,应该仍然弹出剩下的2 3元素才可以
         */
        if (stack2.isEmpty()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }

        return stack2.pop();
    }
}
刷刷题 文章被收录于专栏

刷刷题 活跃活跃脑细胞

全部评论

相关推荐

kzn_ye:看成被正职干了半年,我还以为。。。
点赞 评论 收藏
分享
迷茫的大四🐶:那你问他上班之后老实了没
点赞 评论 收藏
分享
今天 15:54
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务