题目
: 使用栈实现队列的下列操作
使用栈实现队列的下列操作:
push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。
解答: 核心思路是
使用两个栈,一个栈实现进队列,一个栈实现出队列
进队时只能进栈列表有元素,出队时只能出栈列表有元素
即:所有操作的时候 确保最后只有一个栈是有东西 另一个栈是空的
python代码:
# leetcode submit region begin(Prohibit modification and deletion)
class MyQueue(object):
def __init__(self):
"""
Initialize your data structure here.
"""
# tow stacks = queue
self.stack_push = [] #进入栈,push确保 出栈都是空,即pop为空
self.stack_pop = [] #出入栈 pop确保 入栈都是空, 即push为空
def push(self, x):
"""
Push element x to the back of queue.
:type x: int
:rtype: None
"""
while self.stack_pop:
self.stack_push.append(self.stack_pop.pop())
self.stack_push.append(x)
def pop(self):
"""
Removes the element from in front of queue and returns that element.
:rtype: int
"""
if self.empty():
return None
else:
while self.stack_push:
self.stack_pop.append((self.stack_push.pop()))
return self.stack_pop.pop()
def peek(self):
"""
Get the front element.
:rtype: int
"""
if self.empty():
return None #两个栈 总有一个是空
elif not self.stack_pop:
return self.stack_push[0]
else:
return self.stack_pop[-1]
def empty(self):
"""
Returns whether the queue is empty.
:rtype: bool
"""
return not (self.stack_pop or self.stack_push)