#232. 用栈实现队列
题目
用两个栈Stack,FILO,实现一个队列Queue,FIFO。
- 应使其实现push,peek,pop,empty等功能。
解答
两个栈s1, s2。s1中转站,s2输出站(正确顺序)。
Append, Pop:我们这里可以将要加入的元素先放入s1,当我们需要查看队列最前元素的时候,再将中转站的元素移到输出站,并且pop最上边的元素。
Peek,Empty:通过pop,我们可以先保存peek的返回值,再补回这个被移除的元素。
class MyQueue(object):
def __init__(self):
self.s1 = [] #中转站
self.s2 = [] #正确顺序
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.s1.append(x)
def pop(self):
"""
:rtype: int
"""
#empty,中转过来,处理
if not self.s2: #s2 empty
while self.s1:
self.s2.append(self.s1.pop())
#直接处理
return self.s2.pop()
def peek(self):
"""
:rtype: int
"""
#empty,中转过来,处理
if not self.s2: #s2 empty
while self.s1:
self.s2.append(self.s1.pop())
#直接处理
return self.s2[-1]
def empty(self):
"""
:rtype: bool
"""
return not self.s1 and not self.s2
收获
- python List pop(): 返回并删除数组末尾的值 – 印证了python里面数组LIFO的性质。