前往此题

解题思路

  • 队列的区别在于: 前者是先进后出,后者是先进先出
  • 如果用单个无法实现队列的功能,队首元素无法被栈直接删除,需要将所有上方元素出栈。
  • 也就是说在出队(出栈)功能上,队列中的元素是相反的。
    比如 A = [1, 2, 3]队列 B = [3, 2, 1]A出栈意味着将**[3]出栈, B 出队也就是将[3]出队,加下来的出队(出栈)对象是[2]**。
  • 通过双栈A, B , 对其中一个栈执行倒序来实现队列的出队功能,另外一个栈负责存储数据。

函数逻辑

  • 设计两个栈A, B
  • A负责存储入队的数据, B负责依序出队
  • 入队:直接将数据如栈A
  • 出队有三种情况:
    1. 当栈A, B为空的时候代表队列为空,返回**-1**
      2. 当栈A为空, 栈B不为空的时候,栈B出栈并返回栈顶元素
      3. 当栈B为空,栈A不为空的时候,将栈A所有元素倒序后放入栈B并出栈返回栈顶元素

代码

class CQueue:

    def __init__(self):
        self.A, self.B = [],[]

    def appendTail(self, value: int) -> None:
        self.A.append(value)

    def deleteHead(self) -> int:
        if self.B: return self.B.pop()
        if not self.A: return -1
        while self.A:
            self.B.append(self.A.pop())
        return self.B.pop()