牛客网《剑指offer》之Python2.7实现:用两个栈实现队列

题目描述

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

思路

Python里的list有pop()和push()方法,我们可以直接使用两个list作为两个栈。
栈的特性是后进先出,队列的的特性是先进先出。可以考虑同一组数据,在两个栈之间来回倒,一个栈是这组数据的正序,一个栈中是这组数据剩下部分的逆序。
当数据“入队列”操作时,这组数据逆序进入左栈(逆序栈),
当数据“出队列”操作时,若“正序栈”不为空,则“正序栈”栈顶元素即为“出队列”所需元素。若“正序栈”为空,将逆序栈里的元素依次出栈,并进入正序栈,直至逆序栈为空,再将正序栈的栈顶元素出栈。
见图片:
这里写图片描述

代码

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack_positive = []
        self.stack_inverted = []
    def push(self, node):
        # write code here
        self.stack_inverted.append(node)

    def pop(self):
        # return xx
        if 0 != len(self.stack_positive):      #可以直接写作:if self.stack_positive:  即可
            return self.stack_positive.pop()
        else:
            while 0 != len(self.stack_inverted):    #同上写法亦可
                self.stack_positive.append(self.stack_inverted.pop())
            return self.stack_positive.pop()

猜你喜欢

转载自blog.csdn.net/ck_101/article/details/82529418
今日推荐