【菜鸡刷题-牛客网NC76】两个栈形成一个队列 || python


@author=yhr | 原创不易 | 转载请标明来源!|



题目描述

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

class Solution:
    def push(self, node):
        # write code here

    def pop(self):
        # return xx

思路图解

  • 重点一: 栈 、FILO 先进 后出
  • 重点二: 队列、 FIFO 先进 先出

在草稿纸上可以画出如下图:
简单的两个栈:

在这里插入图片描述

由上图,可以得到一个结论:

PUSH 统统PUSH到Stack1
POP 统统由Stack2 POP

一个小问题: Stack2 a. 为空时,b.不为空时,该怎么办?
请看下图 :)


例题: PUSH1 – PUSH2 – POP – PUSH3 – POP – POP在这里插入图片描述
可以看到上图的第三步, 需要POP的时候,Stack2为空,此时把Stack1所有的值,倒入Stack2,再由Stack2 POP。

继续。。。
在这里插入图片描述
可以看到上图的第5步, 需要POP的时候,Stack2不为空

这里很重要!此时直接从Stack2 pop。

不能从Stack1导入数据到Stack2!!

在往栈2压完一批元素后,栈1进了新的元素想往栈2压的时候,
栈2必须把上一批的元素清空了才行!!

大家可以思考一下:

为什么Stack2不为空的时候,不能从Stack1里导入数据进来?
提示关键词: 乱序,覆盖

在这里插入图片描述


上代码

初始化: 栈1 & 栈2

class Solution:
    def __init__(self):
        self.Stack1 = []
        self.Stack2 = []

PUSH – 直接压入栈1

# -*- coding:utf-8 -*-
    def push(self, node):
        '''
		 push操作就直接往stack1中push, 
		'''
        self.Stack1.insert(0, node)
   

POP – 两种情况:a. 栈2为0 , b. 栈2不为0

    def pop(self):
        '''
        pop操作需要分类一下:
        如果stack2为空,那么需要将stack1中数据转移到stack2中, 再对stack2进行pop,
        如果stack2不为空,直接pop就ok。
        
        在往栈2压完一批元素后,栈1进了新的元素想往栈2压的时候,
        栈2必须把上一批的元素清空了才行!!
        '''
        if len(self.Stack2) > 0:
            pass
        else:
            length = len(self.Stack1)
            for _ in range(length):
                self.Stack2.insert(0, self.Stack1.pop(0))
        result = self.Stack2.pop(0)
        return result
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值