【劍指Offer】-2022.02.28用兩個棧實現佇列
阿新 • • 發佈:2022-03-28
題目連結: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 次呼叫
題解:
解題思路:
1.定義stack1,stack2
2.進隊。stack1不為空則進隊,否則隊滿。
3.出隊。若stack1、stack2均空,則隊空;若stack2不空,直接出隊,若stack2為空,stack1不空,則stack1中所有元素先進棧stack2,再出隊。
var CQueue = function() { this.stack1 = []; this.stack2 = []; }; /** * @param {number} value * @return {void} */ CQueue.prototype.appendTail = function(value) { this.stack1.push(value); }; /** * @return {number} */ CQueue.prototype.deleteHead = function() { if(!(this.stack2.length || this.stack1.length)) //兩個棧均空 return -1; if(!this.stack2.length) //棧1不空,棧2空 { while(this.stack1.length) { let value = this.stack1.pop(); this.stack2.push(value); } } return this.stack2.pop(); }; /** * Your CQueue object will be instantiated and called as such: * var obj = new CQueue() ```