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