题目:
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

注意:

你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。


解题思路:

  1. 入栈的时候,入到不为空的队列,刚开始两个队列都为空的话,指定入到一个队列;
  2. 出栈的时候,找到不为空的队列,出size-1个元素到另一个队列中去,剩下的这个元素就是出栈的元素;

关键是画图分析:

具体代码实现如下 :

class MyStack {public Queue<Integer> qu1;public Queue<Integer> qu2;public MyStack() {qu1=new LinkedList<>();qu2=new LinkedList<>();}public void push(int x) { //入栈模拟实现(qu1+qu2)if (!qu1.isEmpty()){qu1.offer(x);}else if (!qu2.isEmpty()){qu2.offer(x);}else{qu1.offer(x);}}public int pop() { //出栈模拟实现(qu1+qu2)if (empty()) return -1;if (!qu1.isEmpty()){int size=qu1.size();for (int i = 0; i < size-1; i++) {int val=qu1.poll();qu2.offer(val);}return qu1.poll();}if (!qu2.isEmpty()){int size=qu2.size();for (int i = 0; i < size-1; i++) {int val=qu2.poll();qu1.offer(val);}return qu2.poll();}return -1;}public int top() { //返回栈顶元素:与上面出栈类似,只不过遍历时候size为全部遍历,最后存到val里面的元素就是栈顶元素!if (empty()) return -1;if (!qu1.isEmpty()){int size=qu1.size();int val=-1;for (int i = 0; i < size; i++) {val=qu1.poll();qu2.offer(val);}return val;}if (!qu2.isEmpty()){int size=qu2.size();int val=-1;for (int i = 0; i < size; i++) {val=qu2.poll();qu1.offer(val);}return val;}return -1;}public boolean empty() { //两个队列都为空的时刻Mystack 为空return qu1.isEmpty() && qu2.isEmpty();}
}

【Java】LeetCode 225. 用队列实现栈相关推荐

  1. leetcode 225 用队列实现栈(JS)

    使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...

  2. leetcode 225. 用队列实现栈(维护两个队列用于倒替元素,使用和1进行按位与,实现队列切换)

    题目 思路 维护两个队列,每一次 pop 或者 top 操作,都把当前队列的所有元素放进另外一个队列中(保留或查看最后一个元素,用于返回) 题解 class MyStack {ArrayList< ...

  3. 代码随想录【day 10 栈与队列】| 232.用栈实现队列、 225. 用队列实现栈

    代码随想录[day 10 栈与队列]| 232.用栈实现队列. 225. 用队列实现栈 理论基础 LeetCode 232.用栈实现队列 题目链接:232.用栈实现队列 卡哥文解 视频讲解 解题思路( ...

  4. LeetCode Algorithm 225. 用队列实现栈

    225. 用队列实现栈 Ideas 队列和栈的相互操作,需要特别理解栈和队列这两种数据结构的相同点和不同点. 栈:先进后出,队列:先进先出. 既然数据结构已经限定元素进出的顺序,那么单纯的用一个队列肯 ...

  5. 代码随想录第十天 | 225. 用队列实现栈 232.用栈实现队列(Java))

    232.用栈实现队列 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue( ...

  6. 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...

  7. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  8. 【代码随想录刷题记录】 232.用栈实现队列 、225. 用队列实现栈

    232.用栈实现队列 题目 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x ...

  9. Suzy找到实习了吗Day 10 | 栈和队列开始啦:232. 用栈实现队列,225. 用队列实现栈

    day10 python栈的实现 Python栈所需要的包 232. 用栈实现队列 思路 solution ?? 225. 用队列实现栈 思路 solution python栈的实现 Python中现 ...

最新文章

  1. 快速生成apk 自动发布到网站 便于测试
  2. 32.C#--方法中使用out参数做登录判断
  3. 关于工具类应用产品界面设计的一点思考
  4. 机器人网首页应用实例工业自动化 EtherCAT 技术在库卡机器人控制系统上的应用
  5. 【代码笔记】iOS-下拉选项cell
  6. SACC2019架构师大会PPT合集
  7. 深度学习的半精度浮点数的运用
  8. POJ2456-Aggressive cows
  9. 使用promise封装ajax请求
  10. IE插件在注册表中的相关位置
  11. 魏尔斯特拉斯---严谨的典范
  12. Flink SQL Client的使用
  13. Python实现图像的全景拼接,这不比ps牛逼
  14. Web3能否撕裂国内 VC 的共识?
  15. 手工注入完成SQL注入漏洞
  16. 人因工程典型应用-隧道灯光循序渐近
  17. mac m1关闭sip系统完整性保护csrutil disable,如何禁用mac m1的系统完整性保护
  18. 网络与信息安全领域泰斗
  19. Technology Daily - 2019/02/27
  20. android 人脸识别换发型,换发型测脸型

热门文章

  1. Python异步通信模块asyncore
  2. softmax layer 简单理解以及实际例子【有白话讲解】
  3. scrapy的几个文件属性
  4. Python自动化办公系列之Python操作PDF
  5. 使用OpenCV和Dlib的头部姿态估计
  6. 编程能力如何突飞猛进?
  7. 线性求[1,P-1]的逆元
  8. 溢出漏洞利用小结(基础)
  9. zabbix4.0使用snmp代理方式监控vcenter6.5
  10. freeRTOSConfig.h文件对FreeRTOS进行系统配置