[编程题]用两个栈实现队列

代码工厂 论文问答 1

用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

数据范围: n≤1000n\le1000 n 1 0 0 0

要求:存储n个元素的空间复杂度为 O(n)O(n) O ( n ) ,插入与删除的时间复杂度都是 O(1)O(1) O ( 1 )

示例1

输入

["PSH1","PSH2","POP","POP"]

输出

1,2

说明

"PSH1":代表将1插入队列尾部
"PSH2":代表将2插入队列尾部
"POP“:代表删除一个元素,先进先出=>返回1
"POP“:代表删除一个元素,先进先出=>返回2   

示例2

输入

["PSH2","POP","PSH1","POP"]

输出

2,1

回复

共1条回复 我来回复
  • 代码工坊
    这个人很懒,什么都没有留下~
    评论

    思路:

    • 栈A用来作入队列
    • 栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列)
      # -*- coding:utf-8 -*-
      class Solution:
          def __init__(self):
              self.stackA = []
              self.stackB = []
    
          def push(self, node):
              # write code here
              self.stackA.append(node)
    
          def pop(self):
              # return xx
              if self.stackB:
                  return self.stackB.pop()
              elif not self.stackA:
                  return None
              else:
                  while self.stackA:
                      self.stackB.append(self.stackA.pop())
                  return self.stackB.pop()
    
    0条评论

发表回复

登录后才能评论