思路
两个栈实现队列,所以只能用push和pop方法。
使用stack1来进行添加的操作,使用stack2来进行辅助
- 添加元素时,将元素push进stack1
- 删除元素时,先看stack2中是否有值,若有值,直接pop并返回
- 若stack2中无值,将stack1中元素全部pop出,并push进stack2
- stack2在pop出一个元素即可,若stack2中无元素,返回-1
这样才能满足最先push进stack1的元素,在stack2的最顶层,所以先从stack2中pop出,满足先入先出特性。
代码
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.stack1.length == 0 && this.stack2.length == 0) {
return -1
}
if(this.stack2.length == 0) {
while(this.stack1.length) {
this.stack2.push(this.stack1.pop())
}
}
return this.stack2.pop();
};
/**
* Your CQueue object will be instantiated and called as such:
* var obj = new CQueue()
* obj.appendTail(value)
* var param_2 = obj.deleteHead()
*/
js知识点
js栈的实现
<script>
var arr = [];
arr.push(a);
arr.push(b);
arr.push(c);//arr为[a,b,c]
var x = arr.pop();//x=c;arr为[a,b]
</script>
js中array数组增删方法总结
- arr.push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
- arr.pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
- arr.unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)。
- arr.shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
const array = [1, 2, 3];
const x = array.shift();//x=1;array=[2,3]
array.unshift(4, 5)//返回值为4;array=[4,5,2,3]
array.push(6);//返回值为5;array=[4,5,2,3,6]
array.pop();//返回值为6;array=[4,5,2,3]