用两个栈实现队列

题目分析

两个栈,一个负责进 (in),一个负责出(out):

class Solution:
    def __init__(self):
        self.__in, self.__out = [], []
  • 进栈逻辑

直接 append 即可

  • 出栈逻辑
    • out 栈不是空的情况: 直接 pop() 即可
    • out 栈为空, in 栈不为空,则从 in 从后向前把数据拷贝到 out ,然后 pop() 即可

代码实现

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.__in, self.__out = [], []
    def push(self, node):
        # in 栈接收新数据
        self.__in.append(node)
    def pop(self):
        # out 为空, 从 in 拷贝数据
        # in[last] -> out[first] ......
        if len(self.__out) <= 0:
            in_length = len(self.__in)
            while in_length > 0:
                self.__out.append(self.__in[in_length -1])
                in_length -= 1
            # 把 in 置空
            self.__in = []    
        return self.__out.pop()