華碩上架新款桌上型電腦:i3-12100F + RTX 3050,5199 元
阿新 • • 發佈:2022-01-27
劍指 Offer 09. 用兩個棧實現佇列
難度:簡單
用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個函式 appendTail 和 deleteHead ,分別完成在佇列尾部插入整數和在佇列頭部刪除整數的功能。(若佇列中沒有元素,deleteHead 操作返回 -1 )
示例
輸入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 輸出:[null,null,3,-1] 輸入: ["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/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解題思路:
python裡面沒有queue、stack這種STL型別,但是python中的list是具有stack需要寫入棧頂(append)與刪除棧頂(pop)的方法,所以可以使用list替代stack棧。
新增元素:一個棧用來儲存資料,新增資料的時候,只需要往這個棧裡面新增即可。
刪除元素:由於棧,每次取的是最後寫入的元素,而佇列需要取的是最前面的一個元素。所以我們需要將棧1的資料全部取出來,寫入棧2中,達到調轉的效果,再將棧2的最後一個元素取出來,就是我們需要取得最前面第一個元素了。
注意:刪除元素之後,需要把棧2上下的元素,依次取出,寫入棧1中,保證資料完整。
案例:
題解原始碼:
作者:紅雨 出處:https://www.cnblogs.com/52why 微信公眾號: 紅雨pythonclass CQueue: def __init__(self): self.stack1 = [] #儲存資料 self.stack2 = [] #資料中轉 def appendTail(self, value: int) -> None: self.stack1.append(value) def deleteHead(self) -> int: self.stack2.clear() res = -1 while len(self.stack1): self.stack2.append(self.stack1.pop(-1)) if len(self.stack2) > 0: res = self.stack2.pop(-1) while len(self.stack2): self.stack1.append(self.stack2.pop(-1)) return res