牛客網原題:
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。
實現這個算法的方式有很多種,這里就寫一種比較簡單易懂的;雖然可能算法和效率上不太出色,當大多數人都應該是一看就能懂;如果要想尋找效率高算法佳的方法,網上搜索一下會找到很多;
思路:
1. 將stack1作為存儲空間,將stack2作為臨時緩沖區;也就是stack2輔助stack1做出隊與入隊操作;
2. 入隊時,直接將元素壓入stack1即可;
3. 出隊時,將stack1中的元素依次出棧壓入stack2中,再將stack2的棧頂元素彈出,最后將stack2中的元素再依次出棧壓入stack1中,從而實現元素的出隊,並返回彈出的元素;
4. 更多思路,訪問博客地址:https://www.cnblogs.com/tracyhan/p/5490775.html
代碼:
1 """ 2 用兩個棧實現一個隊列 3 """ 4 class Solution: 5 def __init__(self): 6 self.stack1 = [] 7 self.stack2 = [] 8 9 def push(self, node): 10 # write code here 11 self.stack1.append(node) 12 13 def pop(self): 14 # return xx 15 if self.stack1 == []: 16 return None 17 else: 18 for i in range(len(self.stack1)): 19 self.stack2.append(self.stack1.pop()) 20 out = self.stack2.pop() 21 for j in range(len(self.stack2)): 22 self.stack1.append(self.stack2.pop()) 23 return out