题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
Python里的list有pop()和push()方法,我们可以直接使用两个list作为两个栈。
栈的特性是后进先出,队列的的特性是先进先出。可以考虑同一组数据,在两个栈之间来回倒,一个栈是这组数据的正序,一个栈中是这组数据剩下部分的逆序。
当数据“入队列”操作时,这组数据逆序进入左栈(逆序栈),
当数据“出队列”操作时,若“正序栈”不为空,则“正序栈”栈顶元素即为“出队列”所需元素。若“正序栈”为空,将逆序栈里的元素依次出栈,并进入正序栈,直至逆序栈为空,再将正序栈的栈顶元素出栈。
见图片:
代码
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack_positive = []
self.stack_inverted = []
def push(self, node):
# write code here
self.stack_inverted.append(node)
def pop(self):
# return xx
if 0 != len(self.stack_positive): #可以直接写作:if self.stack_positive: 即可
return self.stack_positive.pop()
else:
while 0 != len(self.stack_inverted): #同上写法亦可
self.stack_positive.append(self.stack_inverted.pop())
return self.stack_positive.pop()