劍指offer 5、用兩個棧實現佇列 python和c++
阿新 • • 發佈:2021-06-10
題目:
用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。
思路:先用一個棧1來存 “進佇列” 的資料,另一個棧2把棧1資料元素反轉來作為 “出佇列” 的順序,此時把棧1清空。在棧2的資料沒出佇列完的時候,棧1累計後面進佇列的資料。到棧2的資料都出隊列了,又把棧1資料元素反轉放到棧2來作為 “出佇列” 的順序,此時又把棧1清空。
其實也挺好理解,棧2存的都是某次出佇列前進佇列的資料,在棧2沒空之前,棧2裡面的資料都是最先進佇列的,肯定要先出。
c++版
class Solution { public: void push(int node) { stack1.push(node); } int pop() { if(stack2.size() == 0){ //棧2為空的時候把 棧1的資料反轉放在棧2裡面 while(stack1.size()){ stack2.push(stack1.top()); stack1.pop(); } } int res = stack2.top(); stack2.pop(); return res; } private: stack<int> stack1; stack<int> stack2; };
python版
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.Stack1=[] self.Stack2=[] def push(self, node): # write code here self.Stack1.append(node) def pop(self): # return xx if self.Stack2==[]: while self.Stack1: self.Stack2.append(self.Stack1.pop()) return self.Stack2.pop() return self.Stack2.pop()