劍指offer(9)
阿新 • • 發佈:2022-04-22
劍指offer(9)
劍指 Offer 09. 用兩個棧實現佇列
用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個函式 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 次呼叫
class CQueue { private: //兩個棧,一個做輸入棧,一個做輸出棧 stack<int> inStack, outStack; //將輸入棧的元素放到輸出棧 void in2out() { while (!inStack.empty()) { outStack.push(inStack.top()); inStack.pop(); } } public: CQueue() {} void appendTail(int value) { //要在佇列尾部加入元素,直接push到輸入棧即可 inStack.push(value); } int deleteHead() { //刪除佇列頭元素 如果輸出棧為空 if (outStack.empty()) { //如果輸入棧也為空 說明沒資料 返回-1 if (inStack.empty()) { return -1; } //資料在輸入棧中,那麼吧輸入棧中的元素全放到輸出棧即可 in2out(); } //輸入棧中的第一個元素就是佇列頭 直接輸出即可 int value = outStack.top(); outStack.pop(); return value; } };