剑指 Offer 09. 用两个栈实现队列
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进行的一系列操作:
- ["CQueue"] 表示创建一个空的CQueue对象
- ["appendTail", 3] 表示调用appendTail方法,向队列尾部添加元素3
- ["deleteHead"] 表示调用deleteHead方法,删除队列头部元素
- ["deleteHead"] 同上,再次调用deleteHead方法
- ["deleteHead"] 同上,第三次调用deleteHead方法 对应的输出表示每个操作的结果:
- null 表示创建CQueue对象,没有返回值
- null 表示appendTail添加成功,没有返回值
- 3 表示第一次调用deleteHead删除了头部元素,返回3
- -1 表示第二次调用deleteHead时队列为空,返回-1
- -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=[]来创建
- self=[] 创建了一个类变量,那么所有实例都会共享这个列表,无法区分开。
-
- self作为CQueue类的实例,类型是CQueue,不能直接拼接到其他列表中。