1. 程式人生 > 其它 >【劍指Offer】-2022.02.28用兩個棧實現佇列

【劍指Offer】-2022.02.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()

```