問題描述
用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 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;
}
};