剑指 Offer 09. 用两个栈实现队列
题意
剑指 Offer 09. 用两个栈实现队列
解法
栈是先进后出的,队列是先进先出的。 这里可以用一个栈来进行“入队”操作,用另一个栈来进行“出队”操作。 怎么实现先进先出呢?
关键在于先把数据入栈到栈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();
}
}
};