【剑指offer】5.用两个栈来实现队列[by Python]

本文介绍了一种使用两个栈实现队列的方法,通过巧妙地利用栈的特性,实现了队列的先进先出特性。主要讨论了如何在两个栈之间转换元素以完成队列的Push和Pop操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码

题目描述

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


 
  1. # -*- coding:utf-8 -*-
  2. '' '
  3. A是入栈的,B是出栈的,入栈时,直接进入A即可,出栈时,先判断是否有元素,
  4. 如果B没有元素,pop肯定报错,应该先将A中所有的元素压倒B里面,再pop最上面一个元素,如果B中有就直接pop出,就可以,
  5. 这是最优的思路,两个栈实现了先进后出,在一起又实现了队列的先进先出。
  6. ' ''
  7. class Solution:
  8. # 初始化两个栈
  9. def __init__(self):
  10. self.stackA = []
  11. self.stackB = []
  12. # 这里只要求实现队列的push和pop操作,分别使用两个栈表示弹出和压入
  13. def push(self, node):
  14. # write code here
  15. self.stackA.append(node)
  16. # 弹出需要有一个先验条件:若队列为空,则返回None
  17. def pop(self):
  18. # 若压入的栈中有元素则直接弹出
  19. if self. stackB:
  20. self.stackB.pop()
  21. # 若A中没有元素则返回None
  22. elif not self. stackA:
  23. return None
  24. # 若A中有元素,则统一压入B中进行弹出
  25. else:
  26. while self. stackA:
  27. self.stackB.append( self.stackA.pop())
  28. return self.stackB.pop()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值