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()
posted @ 2022-03-07 17:14  小Aer  阅读(3)  评论(0编辑  收藏  举报  来源