面試題09:兩個棧實現隊列

首先大家需要了解一下,棧是先進後出,隊列是先進先出,其實就是爲了實現用兩個棧構成一個對象,實現隊列的效果,即先進先出。對於力扣上的這道面試題的描述,我也是看的半懂,但是因爲考慮到主要是提交對象算法,所以大家可以認爲給的案例是實現的一個過程,告訴大家函數插入數據和提取數據的內部流轉流程。接下來是代碼,最後的主函數我用輸入和輸出給大家一個直觀的看法。

"""
title:面試題09:兩個棧實現隊列
introduce:
用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 appendTail 和 deleteHead ,
分別完成在隊列尾部插入整數和在隊列頭部刪除整數的功能。(若隊列中沒有元素,deleteHead 操作返回 -1 )
示例 1:
輸入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
輸出:[null,null,3,-1]
示例 2:

輸入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
輸出:[null,-1,null,null,5,2]
提示:

1 <= values <= 10000
最多會對 appendTail、deleteHead 進行 10000 次調用
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
"""
class CQueue:
    def __init__(self):
        self.inlist = []
        self.outlist = []

    def appendTail(self, value):
        self.inlist.append(value)

    def deleteHead(self) -> int:
        if len(self.inlist) == 0 and len(self.outlist) == 0:
            return -1
        if len(self.outlist) == 0:
            while len(self.inlist) != 0:
                self.outlist.append(self.inlist.pop())
        return self.outlist.pop()

if __name__ == "__main__":
    obj = CQueue()
    obj.appendTail(3)
    obj.appendTail(5)
    obj.appendTail(12)
    print(obj.deleteHead())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章