zoukankan      html  css  js  c++  java
  • 用两个栈实现队列

    题目描述

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    思路

    首先要明确栈和队列的特性,栈是后入先出的数据类型,队列是先进先出的数据类型,那么就可以用两个栈,一个存储新的push进队列的数据,另一个栈用来pop出队头的数据,push很简单,直接利用栈的特性append进去就可以了,那么pop怎么办呢,需要把队头(也就是最先push的数据)pop出去。有一个办法,就是假如

    1、栈2没有数据,而栈1有数据的话,那就把栈1的数据全pop到栈2去,然后直接用栈2pop

    2、栈1和栈2都没有数据,那就返回None

    3、栈2有数据的话,直接pop栈2的数据

    这样能保证栈2的数据都是“老数据”,且栈2的尾数据一定是最先push到所谓队列的那个队头;而栈1的数据都是“新push的数据”

    解答

    class Solution:
        def __init__(self):
            self._stack1 = []
            self._stack2 = []
        def push(self, node):
            # write code here
            self._stack1.append(node)
        def pop(self):
            # return xx
            if self._stack2:
                return self._stack2.pop()
            elif not self._stack1:
                return None
            else:
                while self._stack1:
                    self._stack2.append(self._stack1.pop())
                return self._stack2.pop()
    人生苦短,何不用python
  • 相关阅读:
    OkHttp3Stack volley
    Badge分析
    Android Icon数字角标(BadgeNumber)的实现方式
    Android ORMLite 框架的入门用法
    实现FlowLayout 自动排序标签
    iptables端口转发配置[Ubuntu]
    编译csipsimple的native部分
    开发JavaScript组件
    jQuery组件开发
    Groovy小结:java调用Groovy方法并传递参数
  • 原文地址:https://www.cnblogs.com/yqpy/p/9557704.html
Copyright © 2011-2022 走看看