劍指offer:用兩個棧實現一個隊列
阿新 • • 發佈:2019-04-16
ack 特性 壓入 [] elf 即將 init 出隊 劍指offer 題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。
用兩個棧來實現一個隊列,完成隊列的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)
劍指offer:用兩個棧實現一個隊列