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

用两个栈实现队列

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

最后

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

图片说明

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
下个早班:秒挂就是不缺人
点赞 评论 收藏
分享
xdm怎么说&nbsp;要被拷打了&nbsp;担心是KPI
丹田:面就完了,就当日薪四位数的大佬免费给给你面试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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