【leetcode】用栈实现队列

解题思路:
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()

猜你喜欢

转载自blog.csdn.net/ningmengzhihe/article/details/127828071