剑指offer:两个队列模拟一个栈
题目描述
用两个队列来实现一个栈,完成栈的Push和Pop操作。 队列中的元素为int类型。
实现方式其实和两个栈模拟一个队列相似,但是区别在于这两个队列的作用和那两个栈的作用不一样。
class Solution: """ 用两个队列模拟一个栈,如果两个队列的容量分别为M和N,其中M > N,那么模拟得到的栈的容量是N+1 因为假设先把queue1塞进N+2个,此时将元素出栈,则需要先将queue1的N+1个元素出队后压入queue2, 由于queue2的容量只有N,入队失败。因此,最大容量是N+1 """ def __init__(self): # queue1和queue2都可以作为入栈的队列,也可以作为出栈的辅助队列,作用一样。不像用栈模拟 # 队列时一个stack是作为入队的栈,另一个stack作为出队的栈。 self.queue1 = [] self.queue2 = [] def push(self, node): # 入栈的时候往非空的队列添加 if self.queue1: self.queue1.append(node) else: self.queue2.append(node) def pop(self): if not self.queue1 and not self.queue2: return None # 出栈的时候需要先将非空队列中的前N-1个元素顺序压入另一个队列,然后是弹出最后一个元素 if self.queue1: while len(self.queue1) > 1: self.queue2.append(self.queue1.pop(0)) return self.queue1.pop(0) else: while len(self.queue2) > 1: self.queue1.append(self.queue2.pop(0)) return self.queue2.pop(0)
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。