[每日一题]232.implement queue using stacks(栈)

1.这是一道使用堆栈去模拟队列的题目,感觉挺难想的。

反正我是没想到。
栈:先进后出。
队列:先进先出。

链接:https://leetcode.com/problems/implement-queue-using-stacks/

232-implement-queue-using-stacks.JPG

我们使用list模拟stack(先进后出),append 入栈,pop出栈
这里,采用两个堆栈实现这个队列。一个用于存数据input,一个用于取数据output。
(每次从input取到output的时候,其实就是把堆栈的数据进行了一次反转。)
1.每次append的时候,就直接存进input中。
2.每次pop或者peek的时候,就先看看output中有数据没,有的话就直接返回,没得话就从input中先读入数据,然后再从output中读

大致过程就是这样:

232_queue_using_stacksBPush.png

2.题解:
# 使用两个stack,一个正常放入输入值,一个在输出时候使用.
class MyQueue(object):

    def __init__(self):
        self.input_stack = []
        self.output_stack = []

    def push(self, x):
        self.input_stack.append(x)

    def pop(self):
        if len(self.output_stack) == 0:
            for i in range(len(self.input_stack)):
                self.output_stack.append(self.input_stack.pop())
        return self.output_stack.pop()

    def peek(self):
        if len(self.output_stack) == 0:
            for i in range(len(self.input_stack)):
                self.output_stack.append(self.input_stack.pop())
        return self.output_stack[-1]

    def empty(self):
        if len(self.input_stack) == 0 and\
                len(self.output_stack) == 0:
            return True
        else:
            return False

3.完整代码

查看链接:
https://github.com/Wind0ranger/LeetcodeLearn/blob/master/2-stack-quque/232-Implement-Queue-using-Stacks.py

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容