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

用两个栈实现队列

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();
        }
    }
}

最后

好啦,这就是两个栈实现一个队列的方法,这道题还是蛮简单的,但是面试的时候缺会经常出现,大家不要掉以轻心。
大家可以去 【牛客网-题库-在线编程】去练习一下。
可以去微信搜索:【蘑菇睡不着】交个朋友~
也可以扫描下方二维码。

图片说明

全部评论

相关推荐

Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务