【LeetCode-面试算法经典-Java实现】【225-Implement Stack using Queues(用队列实现栈操作)】
2015-08-29 06:42
746 查看
【225-Implement Stack using Queues(用队列实现栈操作)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
代码下载【https://github.com/Wang-Jun-Chao】
原题
Implement the following operations of a stack using queues.push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
empty() – Return whether the stack is empty.
Notes:
You must use only standard operations of a queue – which means only push to back, peek/pop from front, size, and is empty operations are valid.
Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
题目大意
使用队列实现栈操作push(x) – 元素入栈
pop() – 元素出栈
top() – 取栈顶元素值
empty() – 判断栈是否为空
注意:
只能使用队列的标准操作,先进先出,求队列元素数,判断队列是否为空
由于编程语言原因,有些语言不支抚摩队列,可以使用链表或双向链表代替,但仅能使用标准的队列操作
你可以假设所有的操作都是合法的,即:当队列为空时不会有元素出栈和求栈顶元素的操作
解题思路
用两个队列来模拟一个栈代码实现
算法实现类import java.util.LinkedList; import java.util.List; public class MyStack { // 维持两个队列,其中总有一个队列为空,为pop和top操作准备 private List<Integer> aList = new LinkedList<>(); private List<Integer> bList = new LinkedList<>(); // Push element x onto stack. public void push(int x) { // 如果aList非空,就将x添加到aList中 if (!aList.isEmpty()) { aList.add(x); } // 否则总添加到bList中 else { bList.add(x); } } // Removes the element on top of the stack. public void pop() { // 两个队列中至少有一个为空,将aList设置非空 if (aList.isEmpty()) { List<Integer> tmp = bList; bList = aList; aList = tmp; } // 除最后一个元素外都转移到bList中 while (aList.size() > 1) { bList.add(aList.remove(0)); } // 删除最后一个元素(对应就是入栈的栈顶元素) aList.clear(); } // Get the top element. public int top() { // 两个队列中至少有一个为空,将aList设置非空 if (aList.isEmpty()) { List<Integer> tmp = bList; bList = aList; aList = tmp; } // 除最后一个元素外都转移到bList中 while (aList.size() > 1) { bList.add(aList.remove(0)); } bList.add(aList.get(0)); return aList.remove(0); } // Return whether the stack is empty. public boolean empty() { return aList.isEmpty() && bList.isEmpty(); } }
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。特别说明
欢迎转载,转载请注明出处【/article/1324032.html】
相关文章推荐
- 6、iOS 开发之 UIPickerView
- 4、iOS 开发之 UITableView
- 3、iOS 开发之 UIScrollView UIPageController NSTimer
- iOS部分-UI基础控件 - 01天 入门 第11课 上下左右移动
- 新建Android工程报错:'Building workspace' has encountered a problem...解决办法
- ngui自适应的一点学习
- ios开发-UI-自定义Tabbar 图书布局
- iOS之Operation Queues 和 Grand Central Dispatch
- PHP生成UUID
- .NET 的 Debug 和 Release build 对执行速度的影响
- 关于CodeFirst异常:无法确定类型'XXX'和类型‘YYY’之间的关联的主体端,必须使用关系 Fluent API 或数据注释显式配置此关联的主体端。
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记44 Popover Segue
- Android UI设计:Notification
- Android UI设计:PopupWindow
- MongoVUE对json数据的导入和导出
- Unable to run Vmware workstation 11 - failed to build vmnet
- [leetcode-187]Repeated DNA Sequences(java)
- easyui-editing datagrid 批量保存数据 二
- 野人学Android基础篇之初探UI控件第五课--RadioGroup
- 从客户端中检测到有潜在危险的 Request.Form 值