LeetCode-225-用队列实现栈
2021/8/2 6:06:20
本文主要是介绍LeetCode-225-用队列实现栈,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
用队列实现栈
题目描述:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
- void push(int x) 将元素 x 压入栈顶。
- int pop() 移除并返回栈顶元素。
- int top() 返回栈顶元素。
- boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-stack-using-queues/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:双队列实现栈
使用2个队列firstQueue和secondQueue存储数据,具体方法说明如下:
push(int x)
:如果firstQueue为空,则将x存到secondQueue中,否则存到firstQueue中;pop()
:如果firstQueue为空,则将secondQueue中的数据都取出然后依次存入firstQueue中只留一个作为栈顶元素取出并返回;否则,将firstQueue中的数据都取出然后依次存入secondQueue中只留一个作为栈顶元素取出并返回;top()
:逻辑通pop()
方法类似;empty()
:如果firstQueue和secondQueue都为空,返回true;否则,返回false。
import java.util.LinkedList; import java.util.Queue; public class LeetCode_225 { public static void main(String[] args) { MyStack myStack = new MyStack(); myStack.push(1); myStack.push(2); myStack.push(3); System.out.println(myStack.top()); // 返回 2 System.out.println(myStack.pop()); // 返回 2 System.out.println(myStack.empty()); // 返回 False } } class MyStack { private Queue<Integer> firstQueue; private Queue<Integer> secondQueue; /** * Initialize your data structure here. */ public MyStack() { firstQueue = new LinkedList<>(); secondQueue = new LinkedList<>(); } /** * Push element x onto stack. */ public void push(int x) { if (firstQueue == null) { secondQueue.add(x); } else { firstQueue.add(x); } } /** * Removes the element on top of the stack and returns that element. */ public int pop() { if (this.empty()) { throw new RuntimeException("empty stack."); } if (firstQueue.isEmpty()) { int size = secondQueue.size(); for (int i = 1; i < size; i++) { firstQueue.add(secondQueue.poll()); } return secondQueue.poll(); } else { int size = firstQueue.size(); for (int i = 1; i < size; i++) { secondQueue.add(firstQueue.poll()); } return firstQueue.poll(); } } /** * Get the top element. */ public int top() { if (this.empty()) { throw new RuntimeException("empty stack."); } int result = -1; if (firstQueue.isEmpty()) { int size = secondQueue.size(); for (int i = 1; i < size; i++) { firstQueue.add(secondQueue.poll()); } result = secondQueue.peek(); firstQueue.add(secondQueue.poll()); } else { int size = firstQueue.size(); for (int i = 1; i < size; i++) { secondQueue.add(firstQueue.poll()); } result = firstQueue.peek(); secondQueue.add(firstQueue.poll()); } return result; } /** * Returns whether the stack is empty. */ public boolean empty() { return firstQueue.isEmpty() && secondQueue.isEmpty(); } }
【每日寄语】 哪怕生活不宠你,也要好好善待自己。这一生,风雨兼程,就是为了遇见最好的自己。
这篇关于LeetCode-225-用队列实现栈的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享
- 2024-12-24uniapp 连接之后会被立马断开是什么原因?-icode9专业技术文章分享
- 2024-12-24cdn 路径可以指定规则映射吗?-icode9专业技术文章分享
- 2024-12-24CAP:Serverless?+AI?让应用开发更简单
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享