题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
push: 直接放到stack1中
pop:
如果stack2中有值,就pop出来;如果没有值,就把stack1中的值全部pop到stack2中,然后stack2pop一个值
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
# write code here
self.stack1.append(node)
def pop(self):
if self.stack2:
return self.stack2.pop()
else:
if self.stack1:
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
return None
if __name__ == '__main__':
queen = Solution()
for x in [1,2,3,4,5]:
queen.push(x)
for x in range(5):
print(queen.pop())
2两个队列实现栈
class StackWith2Queen():
""" 两个队列实现一个栈"""
def __init__(self):
"""初始化两个队列"""
self.queen1 = []
self.queen2 = []
def push(self, num):
"""
执行push操作
num:
"""
# 保证一个队列是空的,然后将num push进空的队列
if self.queen1 == []:
self.queen1.append(num)
if self.queen2 == []:
self.queen2.append(num)
# 如果两个队列长度都为1,说明push进的是queen2,此时把queen1的值全部出队并入队到queen2
# 如果queen1为1,queen2 大于1,说明push进的queen1,此时queen2中的所有值都是在队列的前边,也就是栈的后端。
# 只要queen2中有值,就把queen2中的值出队到queen1中
if len(self.queen1) == 1 and len(self.queen2) > 1:
while self.queen2:
self.queen1.append(self.queen2.pop(0))
# 说明push进的是queen2,此时Queen1内的所有值全部出队并入队到queen2
elif len(self.queen2) == 1 and len(self.queen1) >= 1:
while self.queen1:
self.queen2.append(self.queen1.pop(0))
def pop(self):
""" pop 操作"""
if self.queen1:
return self.queen1.pop(0)
elif self.queen2:
return self.queen2.pop(0)
else:
return None
if __name__ == '__main__':
stack = StackWith2Queen()
for x in [1,2,3,4,5]:
stack.push(x)
for x in range(5):
print(stack.pop())