LeetCode(36)- Implement Stack using Queues
2016-04-08 11:22
302 查看
题目:
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). Update (2015-06-11): The class name of the Java function had been updated to MyStack instead of Stack.
思路:
题意是用队列数据结构来实现栈,要求只能使用Queue的基本函数,包括poll,isEmprty等用两个队列pre和next来实现,pop()操作是把一个非空队列复制到另一个空队列,最后一个不复制,每次判断哪个非空
push(int x)的实现:先判断哪个队列非空,然后添加x,isEmpty()是两个队列都为空的时候
-
代码:
import java.util.LinkedList; import java.util.Queue; class MyStack { Queue<Integer> pre = new LinkedList<Integer>(); Queue<Integer> next = new LinkedList<Integer>(); // Push element x onto stack. public void push(int x) { if(next != null){ next.add(x); }else{ pre.add(x); } } // Removes the element on top of the stack. public void pop() { if(!next.isEmpty()){ while(!next.isEmpty()){ int a = next.poll(); if(!next.isEmpty()){ pre.add(a); } } }else{ while(!pre.isEmpty()){ int b = pre.poll(); if(!pre.isEmpty()){ next.add(b); } } } } // Get the top element. public int top() { if(!next.isEmpty()){ while(!next.isEmpty()){ int c = next.poll(); pre.add(c); if(next.isEmpty()){ return c; } } }else{ while(!pre.isEmpty()){ int d = pre.poll(); next.add(d); if(pre.isEmpty()){ return d; } } } return 0; } public boolean empty() { if(next.isEmpty() && pre.isEmpty()){ return true; }else{ return false; } } }
相关文章推荐
- LeetCode(36)- Implement Stack using Queues
- xcodebuild error: unable to rename temporary
- java之Continue解析
- dequeueReusableCellWithIdentifier和dequeueReusableCellWithIdentifier:forIndexPath的区别
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
- iPhone/iPad/Android UI尺寸规范
- require和include的区别
- 2016.04.07,英语,《Vocabulary Builder》Unit 11
- iOS开发技巧(系列十二:UUID和UDID的区别)
- 标准模板库(STL)之 priority_queue 列传
- 黑暗料理一之修改UITableViewCell左滑删除按钮的样式和自定义
- LeetCode 128. Longest Consecutive Sequence
- ubuntu下打印unit64_t size_t uint32_t 类型
- xoyojank 的 UE4中的DynamicTexture数据更新
- [IOS 开发] 获取设备UUID
- UINavigationBar的视图层级关系
- iOS---[UIDevice identifierForVendor]慎用!
- Qt 示例学习--2. calendar quick controls
- ios GPUImage简单滤镜 -- 录制视频(保存+聚焦)
- android 开发,百度地图 UI 控制器常用方法及作用