1. 程式人生 > 資訊 >華碩上架新款桌上型電腦:i3-12100F + RTX 3050,5199 元

華碩上架新款桌上型電腦:i3-12100F + RTX 3050,5199 元

劍指 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中,保證資料完整。

案例:

題解原始碼:

class 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
作者:紅雨
出處:https://www.cnblogs.com/52why
微信公眾號: 紅雨python