劍指 Offer 09. 用兩個棧實現隊列(C++)

題目詳情

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

 

示例 1:
輸入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
輸出:[null,null,3,-1]
 

 

示例 2:
輸入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
輸出:[null,-1,null,null,5,2]



提示:

  • 1 <= values <= 10000
  • 最多會對 appendTail、deleteHead 進行 10000 次調用

     

——題目難度:簡單


 




關於棧的操作可以看棧解題(文中有有關棧的介紹和方法總結)這篇。
要用兩個棧來代替一個隊列,也就是實現隊列的功能的話,可以用棧st1來進行支持插入操作、棧st2來進行支持刪除操作。
 



 

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



-代碼如下

class CQueue {
private:
	/*st1、st2 共同來實現隊列的尾部插入 和 頭部刪除 功能*/ 
	stack<int> st1; //用於尾部插入的棧
	stack<int> st2; //用於頭部刪除的棧 
public:
    CQueue()  { }
    
    void appendTail(int value) {
		st1.push(value); //尾部插入 
    }
    
    int deleteHead() {
		if (st2.empty()) {
			
			while (!st1.empty()) { //把st1的全部元素 彈出 插入 到st2裏 
				st2.push(st1.top());
				st1.pop();
			}
			
			//st1的全部元素 彈出 插入 到st2後,發現還是空的,則說明st1裏沒有元素
			if (st2.empty()) {  
				return -1;
			} else {
				int temp = st2.top();
				st2.pop();
				return temp;
			}
			
		} else { //st2不爲空 直接返回棧頂元素 
			int temp = st2.top();
			st2.pop();
			return temp;
		}
    }
};

結果

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