剑指 Offer 09. 用两个栈实现队列
题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:
[null,null,3,-1]
解法:模拟
一个队列具备的两个功能分别由两个栈来完成:栈inStack实现入队功能,栈outStack实现出队功能
var CQueue = function() {
this.inStack = []
this.outStack = []
};
CQueue.prototype.appendTail = function(value) {
this.inStack.push(value)
};
CQueue.prototype.deleteHead = function() {
if(this.outStack.length) return this.outStack.pop()
if(!this.inStack.length) return -1
while(this.inStack.length){
this.outStack.push(this.inStack.pop())
}
return this.outStack.pop()
};
let inStack = [], outStack = []
function push(node)
{
inStack.push(node)
}
function pop()
{
if(!outStack.length){
while(inStack.length){
outStack.push(inStack.pop())
}
}
return outStack.pop()
}