溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

劍指offer:用兩個棧實現一個隊列

發布時間:2020-06-16 15:40:16 來源:網絡 閱讀:534 作者:Jayce_SYSU 欄目:編程語言

題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。

類似漢諾塔,當我們需要將棧A下面的元素出棧的時候可以先將棧A中的元素全部逆序壓入到另一個棧B,這時棧B保存的就是棧A的逆序,也就是滿足了FIFO的要求

class Solution:
    """
    用兩個棧模擬一個隊列,如果兩個棧的容量分別為M和N,其中M > N,那么模擬得到的隊列的容量是2N+1
    因為假設先把stack2塞滿N個,然后此時stack1塞進N+2個,那么此時將元素出隊,當stack2的元素全
    部出棧之后,將stack1的后N個元素壓入stack2,此時stack1還有2個元素,且這兩個元素是即將要出隊
    的兩個元素,最先要出隊的元素在下面,沒辦法按順序出隊,不滿足隊列的特性。因此最大容量是2N+1
    """
    def __init__(self):
        self.stack1 = []  # stack1用來保存進隊的元素
        self.stack2 = []  # stack2用來保存將要出隊的元素

    def push(self, node):
        self.stack1.append(node)

    def pop(self):
        if not self.stack1 and not self.stack2:
            return None
        if not self.stack2:  # 當stack2為空的時候將stack1的元素逆序壓入
            while self.stack1:
                self.stack2.append(self.stack1.pop(-1))
        return self.stack2.pop(-1)
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女