剑指 Offer 09. 用两个栈实现队列

67 阅读2分钟

剑指 Offer 09. 用两个栈实现队列

image.png


    def __init__(self):



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



    def deleteHead(self) -> int:



# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()

首先需要明白题目意思

Your CQueue object will be instantiated and called as such:
obj = CQueue()
obj.appendTail(value)
param_2 = obj.deleteHead()

  • 这是对一个 CQueue (循环队列)类的使用说明。CQueue 是一个自定义的类,用于实现循环队列的数据结构。obj = CQueue() # 创建CQueue对象obj.appendTail(value) # 往队尾添加一个元素valueparam_2 = obj.deleteHead() # 删除队头元素并返回值所以整体的意思是:1. 创建一个CQueue对象2. 通过appendTail方法往队列尾部添加元素3. 通过deleteHead方法删除队列头部元素并返回删除的元素这样就可以使用CQueue类来实现一个循环队列的数据结构,从队尾加入元素,从队头删除元素。

输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]

  • 这是一个表示对CQueue类进行操作的示例输入和输出: 输入是一个二维数组,表示对CQueue进行的一系列操作:
  1. ["CQueue"] 表示创建一个空的CQueue对象
  2. ["appendTail", 3] 表示调用appendTail方法,向队列尾部添加元素3
  3. ["deleteHead"] 表示调用deleteHead方法,删除队列头部元素
  4. ["deleteHead"] 同上,再次调用deleteHead方法
  5. ["deleteHead"] 同上,第三次调用deleteHead方法 对应的输出表示每个操作的结果:
  6. null 表示创建CQueue对象,没有返回值
  7. null 表示appendTail添加成功,没有返回值
  8. 3 表示第一次调用deleteHead删除了头部元素,返回3
  9. -1 表示第二次调用deleteHead时队列为空,返回-1
  10. -1 同上,第三次调用也返回-1 所以这个示例表示: 创建空队列,添加元素3,删除元素返回3,再删除两个元素都返回-1,表示队列为空。 整个过程演示了使用CQueue类实现循环队列的基本操作。

知道了这个过程这个问题就很简单了


    def __init__(self):
        #self.queue =[]


    def appendTail(self, value: int) -> None:
        #self.queue=[value]+self.queue


    def deleteHead(self) -> int:
        # if self.queue:
        #     return self.queue.pop()
        # return -1



# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()

需要注意的是需要使用self.queue创建实例对象,而不能直接self=[]来创建

  1. self=[] 创建了一个类变量,那么所有实例都会共享这个列表,无法区分开。
    1. self作为CQueue类的实例,类型是CQueue,不能直接拼接到其他列表中。