栈与队列的转换

0X00 模板题目

  • 232. Implement Queue using Stacks

使用栈翻转的性质, 把栈翻转两次可以做到 FIFO, 在代码中使用了两个栈, 一个用来 Push, 一个用来 Pop

class MyQueue:

    def __init__(self):
        self.popStack = []
        self.pushStack = []

    def push(self, x: int) -> None:
        self.pushStack.append(x)
        
    def pop(self) -> int:
        # 要等 popStack 空了才能转移
        if self.popStack:
            return self.popStack.pop()
        
        while self.pushStack:
            self.popStack.append(self.pushStack.pop())

        return self.popStack.pop()

    def peek(self) -> int:
        if self.popStack:
            return self.popStack[-1]
        
        while self.pushStack:
            self.popStack.append(self.pushStack.pop())
            
        return self.popStack[-1]


    def empty(self) -> bool:
        return not self.popStack and not self.pushStack

  • 225. Implement Stack using Queues

这个稍微难一点, 本质就是 popleft 整个队列, 把第一个元素拿出来, 然后把剩下的元素放入另外一个「辅助队列」里面

再交换两个队列

from collections import deque
class MyStack:

    def __init__(self):
        self.pushQue = deque()
        self.helperQue = deque()

    def push(self, x: int) -> None:
        self.pushQue.appendleft(x)

    def pop(self) -> int:
        while len(self.pushQue) > 1:
            self.helperQue.appendleft(self.pushQue.pop())
        
        ans = self.pushQue.pop()
        self.pushQue,  self.helperQue =  self.helperQue, self.pushQue
        return ans

    def top(self) -> int:
        return self.pushQue[0]

    def empty(self) -> bool:
        return not self.pushQue

0X01 注意事项

暂无

0X02 相关题目

  • 232. Implement Queue using Stacks

  • 225. Implement Stack using Queues

你可能感兴趣的:(栈与队列的转换)