【leetcode】用栈实现队列

该博客介绍了一种利用两个栈(instack 和 outstack)实现队列操作的方法。在push时,如果instack非空,则将instack的元素转移到outstack中,然后将x压入instack。在pop和peek时,同样先将outstack的元素转移回instack,再进行操作。empty方法检查两个栈是否都为空。这种方法巧妙地利用了栈的特性来实现队列的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:
Note(1)试试instack和outstack可以同时存放元素,也就是Note(1)部分哟,这样不需要每次push都傻傻的倒一次哟
Note(2)巧用python list的append和pop

class MyQueue:

    def __init__(self):
        self.instack = [] # 入元素的栈
        self.outstack = [] # 出元素的栈
        # 元素可以不全部在instack或者outstack里边

    def push(self, x: int) -> None:
        # Note(1)如果instack里边有元素,那么先把instack的元素放到outstack里边
        while self.instack != []:
            self.outstack.append(self.instack.pop()) # Note(2)
        # 此时instack空了,放入x
        self.instack.append(x)        

    def pop(self) -> int:
        # Note(1)如果outstack里边有元素,那么先把outstack的元素放到instack里边
        while self.outstack != []:
            self.instack.append(self.outstack.pop()) # Note(2)
        # 此时outstack空了,弹出instack的栈顶
        x = self.instack.pop()
        return x 

    def peek(self) -> int:
        # Note(1)如果outstack里边有元素,那么先把outstack的元素放到instack里边
        while self.outstack != []:
            self.instack.append(self.outstack.pop()) # Note(2)
        # 此时outstack空了,返回instack的栈顶元素 
        x = self.instack[-1]
        return x

    def empty(self) -> bool:
        # Note(1)由于instack和outstack都可能有元素,所以两个栈都要判断是否是空的
        if self.instack==[] and self.outstack==[]:
            return True
        else:
            return False



# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值