专栏首页码匠的流水账leetcode栈之用队列实现栈
原创

leetcode栈之用队列实现栈

本文主要记录一下leetcode栈之用队列实现栈

题目

使用队列实现栈的下列操作:    push(x) -- 元素 x 入栈    pop() -- 移除栈顶元素    top() -- 获取栈顶元素    empty() -- 返回栈是否为空注意:    你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。    你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。    你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-stack-using-queues著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

class MyStack {    private Queue<Integer> a;    private Queue<Integer> b;    /** Initialize your data structure here. */    public MyStack() {        a = new LinkedList<>();        b = new LinkedList<>();    }    /** Push element x onto stack. */    public void push(int x) {        a.offer(x);        // 将b队列中元素全部转给a队列        while(!b.isEmpty())            a.offer(b.poll());        // 交换a和b,使得a队列没有在push()的时候始终为空队列        Queue temp = a;        a = b;        b = temp;    }    /** Removes the element on top of the stack and returns that element. */    public int pop() {        return b.poll();    }    /** Get the top element. */    public int top() {        return b.peek();    }    /** Returns whether the stack is empty. */    public boolean empty() {        return b.isEmpty();    }}/** * Your MyStack object will be instantiated and called as such: * MyStack obj = new MyStack(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.top(); * boolean param_4 = obj.empty(); */

小结

这里使用了两个LinkedList,在push的时候,offer到a队列,然后再将b队列的元素offer到a队列,再交换a、b队列;pop、top、empty的时候直接操作b队列。

doc

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • leetcode栈之用队列实现栈

    这里使用了两个LinkedList,在push的时候,offer到a队列,然后再将b队列的元素offer到a队列,再交换a、b队列;pop、top、empty的...

    codecraft
  • 聊聊feign的Retryer

    feign-core-10.2.3-sources.jar!/feign/Retryer.java

    codecraft
  • 聊聊EventDeserializer的CompatibilityMode

    本文主要研究一下EventDeserializer的CompatibilityMode

    codecraft
  • leetcode栈之用队列实现栈

    这里使用了两个LinkedList,在push的时候,offer到a队列,然后再将b队列的元素offer到a队列,再交换a、b队列;pop、top、empty的...

    codecraft
  • 三分钟基础:什么是队列?

    像线程池、异步队列、消息队列等有限的资源容器中,往往存储大量的任务事件,这些大量的任务事件需要进行有条理的进行任务分发以及各种情况处理,为了能够使得资源容器的正...

    帅地
  • 栈与队列:总结篇!

    相信不仅仅是C++中有这些问题,那么大家使用其他编程语言,也可以考虑一下这四个问题,栈和队列是如何实现的。

    代码随想录
  • 【FreeRTOS】队列管理2

    创建一个队列用于保存类型为xData 的结构体数据单元。结构体成员包括了一个数据值和表示数据含义的编码,两者合为一个消息可以一次性发送到队列。 ? 中央控...

    心跳包
  • 【FreeRTos】队列管理1

    写队列任务在每次循环中都调用taskYIELD()。taskYIELD()通知调度器立即进行任务切换,而不必等到当前任务的时间片耗尽。某个任务调用taskY...

    心跳包
  • Hadoop FairScheduler

    本文档描述FairScheduler,一个允许YARN应用程序公平共享集群资源的调度插件。

    用户1217611
  • Java队列学习第一篇之列介绍

    队列大家都知道,但是在Java中队列分哪几种呢?清楚吗?都有哪些地方用到了队列呢?最常用的场景的就是消息中间件,比如各种MQ都是使用的队列来的。如果没有用过消息...

    凯哥Java

扫码关注云+社区

领取腾讯云代金券