題目詳情
用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 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;
}
}
};
結果