剑指offer:两个队列模拟一个栈

发布时间:2020-07-30 04:38:29 作者:Jayce_SYSU
来源:网络 阅读:403

题目描述
用两个队列来实现一个栈,完成栈的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)
推荐阅读:
  1. 剑指offer:用两个栈实现一个队列
  2. 使用两个队列实现一个栈

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

队列 两个队

上一篇:MongoDB 索引简单使用技巧

下一篇:C# 添加超链接到PDF文档

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》