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 may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
  • 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 -- which means only push to backpop from frontsize, and is empty operations are valid.

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.

用队列Queues的基本操作来实现栈Stack,队列和栈都是重要的数据结构,区别主要是,队列是先进先出,而栈是先进后出。

解法1:  在队列push进来新元素时,就把其它元素pop出来排到新元素的后面,新元素就在前面了,就可以后进先出。就好像大家都在排队,来了个重要客人,要让他第一,其他人从前面按顺序跑到他后面。

解法2: push的时候,其他元素不动只是用一个变量记住这个新元素。当top的时候直接给这个变量的值。当pop时,在调整顺序,把最后一个排到前面,弹出。变量记住目前在最尾部的值。

Java:

class MyStack {
LinkedList<Integer> queue1 = new LinkedList<Integer>();
LinkedList<Integer> queue2 = new LinkedList<Integer>(); // Push element x onto stack.
public void push(int x) {
if(empty()){
queue1.offer(x);
}else{
if(queue1.size()>0){
queue2.offer(x);
int size = queue1.size();
while(size>0){
queue2.offer(queue1.poll());
size--;
}
}else if(queue2.size()>0){
queue1.offer(x);
int size = queue2.size();
while(size>0){
queue1.offer(queue2.poll());
size--;
}
}
}
} // Removes the element on top of the stack.
public void pop() {
if(queue1.size()>0){
queue1.poll();
}else if(queue2.size()>0){
queue2.poll();
}
} // Get the top element.
public int top() {
if(queue1.size()>0){
return queue1.peek();
}else if(queue2.size()>0){
return queue2.peek();
}
return 0;
} // Return whether the stack is empty.
public boolean empty() {
return queue1.isEmpty() & queue2.isEmpty();
}
} 

Python: Time: push: O(n), pop: O(1), top: O(1), Space: O(n)

class Queue:
def __init__(self):
self.data = collections.deque() def push(self, x):
self.data.append(x) def peek(self):
return self.data[0] def pop(self):
return self.data.popleft() def size(self):
return len(self.data) def empty(self):
return len(self.data) == 0 class Stack:
# initialize your data structure here.
def __init__(self):
self.q_ = Queue() # @param x, an integer
# @return nothing
def push(self, x):
self.q_.push(x)
for _ in xrange(self.q_.size() - 1):
self.q_.push(self.q_.pop()) # @return nothing
def pop(self):
self.q_.pop() # @return an integer
def top(self):
return self.q_.peek() # @return an boolean
def empty(self):
return self.q_.empty()

Python:  Time: push: O(1), pop: O(n), top: O(1),Space: O(n)

class Stack:
# initialize your data structure here.
def __init__(self):
self.q_ = Queue()
self.top_ = None # @param x, an integer
# @return nothing
def push(self, x):
self.q_.push(x)
self.top_ = x # @return nothing
def pop(self):
for _ in xrange(self.q_.size() - 1):
self.top_ = self.q_.pop()
self.q_.push(self.top_)
self.q_.pop() # @return an integer
def top(self):
return self.top_ # @return an boolean
def empty(self):
return self.q_.empty()

类似题目:

[LeetCode] 232. Implement Queue using Stacks 用栈来实现队列

All LeetCode Questions List 题目汇总

  

  

最新文章

  1. USACO翻译:USACO 2014 DEC Silver三题
  2. C语言 百炼成钢18
  3. {A} + {B} 分类: HDU 2015-07-11 18:06 6人阅读 评论(0) 收藏
  4. mysql装载本地文件及模式匹配
  5. Java设计模式之装饰模式趣谈
  6. Katana概述
  7. 利用hibernate的session查询数据库,而且在jsp页面显示表内容的方法
  8. 第10章 外观模式(Fa&#231;ade Pattern)
  9. 【原创】有关Buffer使用,让你的日志类库解决IO高并发写
  10. .net core使用Ocelot+Identity Server统一网关验证
  11. Hashmap误区
  12. .net core 发送邮件
  13. ERROR 1045 (28000): Access denied for user &#39;mysql&#39;@&#39;localhost&#39; (using password: YES
  14. 巧用border效果
  15. Windows下 安装Jenkins 并发布至docker 实战
  16. Apex 的异常处理
  17. 2017湖湘杯复赛writeup
  18. js 逻辑运算符
  19. tms web core 与 kbmmw 第一次亲密接触
  20. ApiGen安装

热门文章

  1. opencv图片压缩视频并读取
  2. python基础---python基础语法
  3. Codeforces I. Vessels(跳转标记)
  4. 小程序之程序构造器App()
  5. 《逆袭团队》第九次团队作业【Beta】Scrum meeting 2
  6. modbus-poll和modbus-slave工具的学习使用——modbus协议功能码2的解析
  7. ActiveMQ基础
  8. .net 代码调用cmd执行.exe程序,获取控制台输出信息
  9. May Cook-Off 2019 解题报告
  10. ztree异步加载---------补发周日内容