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-11-05在 etcd 中怎么看有多少客户端在监视特定键 (watch)-icode9专业技术文章分享
- 2024-11-05uniapp 怎么实现返回上一页效果-icode9专业技术文章分享
- 2024-11-05UniApp 中则么实现检查一个 URL 是否以 "http://" 开头功能-icode9专业技术文章分享
- 2024-11-05怎么使用nslookup指定dns解析?-icode9专业技术文章分享
- 2024-11-05shopify 中 的 analyticsToken 一般多久过期?-icode9专业技术文章分享
- 2024-11-05array_intersect_key 有没有前后顺序-icode9专业技术文章分享
- 2024-11-05在 CodeIgniter 3.x 中,怎么批量插入返回值?-icode9专业技术文章分享
- 2024-11-05初学者必备:轻松入门TypeScript (ts)编程
- 2024-11-05TypeScript 入门教程:从零开始学习
- 2024-11-05TypeScript入门指南:从基础到实践