劍指offer-用兩個棧實現隊列(leetcode)

這道題目的思路很簡單:將輸入的數據壓入s1中,再將s1中的數據壓入s2中,這樣s2的出棧順序就和隊列的出隊順序一致。

但是在判斷出棧的時候要先判斷s2是否爲空,再判斷s1是否爲空。

若兩者都爲空,則輸出-1

若s2不爲空,則返回棧頂元素

若s2爲空 && s1不爲空,將s1中的元素壓入s2中,再返回s2的棧頂元素

class CQueue {
    stack<int> s1;
    stack<int> s2;
public:
    CQueue() {

    }
    
    void appendTail(int value) {
        s1.push(value);
    }
    
    int deleteHead() {
        int ans = -1;
        if(!s2.empty()){
            ans = s2.top();
            s2.pop();
            return ans;
        }
        if(s1.empty()){
            return ans;
        }

        while(!s1.empty()){
            s2.push(s1.top());
            s1.pop();
        }
        ans = s2.top();
        s2.pop();
        return ans;
    }
};

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

 

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