題目描述
用兩個棧來實現一個隊列,完成隊列的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)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。