Leetcode 劍指 Offer 09. 用兩個棧實現隊列【數據結構設計】

問題描述

用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 appendTail 和 deleteHead ,分別完成在隊列尾部插入整數和在隊列頭部刪除整數的功能。(若隊列中沒有元素,deleteHead 操作返回 -1 )

示例 1:

輸入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
輸出:[null,null,3,-1]

解題報告

數據入隊列時,將數據壓入棧 1 中;
數據出隊列時,需要將棧 1 棧底的元素彈出,所以將棧 1 中的元素壓入棧 2 中,等棧 1 只剩下一個元素時,將其作爲刪除的元素返回,同時將棧 2 中重新壓入棧 1 中以恢復原始的入棧順序

實現代碼

class CQueue {
public:
    stack<int> stack1;
    stack<int> stack2;
    CQueue() {}
    
    void appendTail(int value) {
        stack1.push(value);
    }
    
    int deleteHead() {
        if (stack1.empty()) return -1;
        
        while (stack1.size()>1){ 
            int tmp = stack1.top();
            stack1.pop();
            stack2.push(tmp);
        }
        // delete head
        int ans = stack1.top();
        stack1.pop();
        while (!stack2.empty()){
            int tmp = stack2.top();
            stack2.pop();
            stack1.push(tmp);
        }
        return ans;
    }
};

參考資料

[1] Leetcode 劍指 Offer 09. 用兩個棧實現隊列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章