剑指 Offer 09. 用两个栈实现队列

338 阅读1分钟

剑指 Offer 09. 用两个栈实现队列

题意

剑指 Offer 09. 用两个栈实现队列

image.png

解法

栈是先进后出的,队列是先进先出的。 这里可以用一个栈来进行“入队”操作,用另一个栈来进行“出队”操作。 怎么实现先进先出呢?

关键在于先把数据入栈到栈A,再从栈A入栈到栈B,这样出栈的时候对于整体来说刚好就是先进先出。有点负负得正的感觉。

代码

var CQueue = function() {
    this.stackA = [];
    this.stackB = [];
};

// 入栈的时候进入栈A
CQueue.prototype.appendTail = function(value) {
    this.stackA.push(value);
};

// 出栈的时候从栈B出栈,若栈B为空,则将栈A的数据加入到栈B
CQueue.prototype.deleteHead = function() {
    if(this.stackB.length){
        return this.stackB.pop();
    }else{
        while(this.stackA.length){
            this.stackB.push(this.stackA.pop());
        }
        // 加入数据后若栈B依然为空,则表示“队列”为空
        if(!this.stackB.length){
            return -1;
        }else{
            return this.stackB.pop();
        }
    }
};