剑指offer(用两个栈实现队列)

135 阅读1分钟

用两个栈实现队列

image.png

题目分析

  • 队列的特性是先进先出,栈的特性是先进后出。要用两个栈实现队列,我们需要维护一个插入栈和一个删除栈。当执行插入操作时直接向插入栈中插入数据,执行删除操作时我们先判断删除栈中有没有数据,如果有数据直接弹出当前栈顶元素,如果没有数据判断插入栈中有没有数据,如果插入栈中也没有数据,直接返回1-1,否则将插入栈中的数据依次弹出插入到删除栈中,此时删除栈中的栈顶元素为最先插入的数据,弹出即可。

代码

var CQueue = function () {
    this.appendSatck = [];
    this.deleteSatck = [];
};

/** 
 * @param {number} value
 * @return {void}
 */
CQueue.prototype.appendTail = function (value) {
    this.appendSatck.push(value);
};

/**
 * @return {number}
 */
CQueue.prototype.deleteHead = function () {
    if (this.deleteSatck.length) {
        return this.deleteSatck.pop();
    }
    if (!this.appendSatck.length) {
        return -1;
    }
    while (this.appendSatck.length) {
        this.deleteSatck.push(this.appendSatck.pop());
    }
    return this.deleteSatck.pop();
};

/**
 * Your CQueue object will be instantiated and called as such:
 * var obj = new CQueue()
 * obj.appendTail(value)
 * var param_2 = obj.deleteHead()
 */