LeetCode-剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
思路:
- 1.python使用列表实现两个栈int, out
- 2.入队的时候对int列表(栈)append
- 3.出队的时候判断out是否为空,不为空,将out列表(栈)最后一位保存之后,更新out,同时返回保存值
- 4.出队时候out为空,需要将int全部倒放入out中;
- 4.1如果此时out还是空,也就是int为空,返回-1,表示没有入队的情况下直接出队的;
- 4.2如果此时out不为空,执行和3同样的操作,由于这两步操作相同,所以放在了if外层
class CQueue:
def __init__(self):
self.int = []
self.out = []
def appendTail(self, value: int) -> None:
self.int.append(value)
def deleteHead(self) -> int:
if len(self.out) == 0:
self.out = [self.int[i] for i in range(len(self.int)-1, -1, -1)]
self.int = []
if len(self.out) == 0:
return -1
# else:
# num = self.out[-1]
# self.out = self.out[0:-1]
# return num
# else:
# num = self.out[-1]
# self.out = self.out[0:-1]
# return num
# 上面的注释代码复杂,但是使用注释代码更容易理解
num = self.out[-1]
self.out = self.out[0:-1]
return num
# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()