[LeetCode] 225. Implement Stack using Queues 用队列来实现栈
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 back,pop from front,size, andis emptyoperations 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 题目汇总
[LeetCode] 225. Implement Stack using Queues 用队列来实现栈的更多相关文章
- LeetCode 225 Implement Stack using Queues 用队列实现栈
1.两个队列实现,始终保持一个队列为空即可 class MyStack { public: /** Initialize your data structure here. */ MyStack() ...
- LeetCode 225 Implement Stack using Queues(用队列来实现栈)(*)
翻译 用队列来实现栈的例如以下操作. push(x) -- 将元素x加入进栈 pop() -- 从栈顶移除元素 top() -- 返回栈顶元素 empty() -- 返回栈是否为空 注意: 你必须使用 ...
- [LeetCode] Implement Stack using Queues 用队列来实现栈
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- (easy)LeetCode 225.Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- Java for LeetCode 225 Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- Leetcode 225 Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- Java [Leetcode 225]Implement Stack using Queues
题目描述: Implement the following operations of a stack using queues. push(x) -- Push element x onto sta ...
- Leetcode 225 Implement Stack using Queues STL
用两个队列去实现栈,这里我使用了队列数组q[2],在所有的过程中保证一个队列是空的 push时插入到空的队列中,然后将队列中的元素移到另一个队列中 pop时从不空的队列中pop() peek时从不空的 ...
- 225 Implement Stack using Queues(用队列实现栈Medium)
题目意思:用队列实现栈,push(),pop(),top(),empty() 思路:用两个queue,pop时将一个queue的元素pop再push到另一个队列,queue只留最后一个元素,并pop, ...
随机推荐
- PAT甲级1005水题飘过
题目分析:用一个字符串输入之后遍历每一位求和后,不断%10获取最后一位存储下来,逆序用对应的英文单词输出(注意输入为0的情况) #include<iostream> #include< ...
- 米勒罗宾素数检测(Miller-Rabin)
适用范围:较大数的较快素性判断 思路: 因为有好的文章讲解具体原理(见参考文章),这里只是把代码的大致思路点一下,读完了文章如果还有些迷糊,可以参考以下解释 原理是费马小定理:如果p是素数,则a^(p ...
- Kotlin调用Java程序解析
Kotlin跟Java是百分百兼容的,换言之,也就是它们俩是可以互操作的,也就是Java可以调Kotlin,Koltin可以调Java,所以下面来看一下在Kotlin中如何来调用Java代码: 咱们来 ...
- Android init介绍(下)
上一篇请参考<Android init介绍(上)> 5. AIL 在init启动过程中,系统服务等均是通过解析rc文件来启动,而rc文件则是由Android初始化语言(Android In ...
- Alpha冲刺(6/10)——2019.4.29
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(6/10)--2019.4.29 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- Maven和Ajax
****************使用maven构建项目******************** 一个maven项目必须要有一个pom文件. maven中常用的命令: 在使用mvn archetype: ...
- [Codeforces 1242B]0-1 MST
Description 题库链接 给你一张 \(n\) 个点的完全图,其中有 \(m\) 条边长度为 \(1\),其余全为 \(0\).问你这张图的最小生成树为多少. \(1\leq n\leq 10 ...
- LeetCode 990. Satisfiability of Equality Equations
原题链接在这里:https://leetcode.com/problems/satisfiability-of-equality-equations/ 题目: Given an array equat ...
- Tensorflow细节-Tensorboard可视化-简介
先搞点基础的 注意注意注意,这里虽然很基础,但是代码应注意: 1.从writer开始后边就错开了 2.writer后可以直接接writer.close,也就是说可以: writer = tf.summ ...
- learning armbian steps(11) ----- armbian 源码分析(六)
接下来我们来分析一下uboot的编写过程: 从 lib/compilation.sh 89开始阅读: compile_uboot() { # not optimal, but extra clean ...