以前一直用的是python,已经决定转前端啦~所以开启前端刷题之旅
题目描述
考察知识点
- 栈和队列的特点:队列先进先出,栈先进后出
- JS中关于Array的内置方法:push,pop,shift,unshift
解题思路
两次进出栈就可以实现队列的先进先出
- 创建两个栈A和B,A用于存储数据(push),B用于存储(push)从A的栈顶获取的数据(pop)
- 注意:
(1)AB中均没有数据返回-1;
(2)B中没有数据,就读取A的栈顶数据存储到B中,如果B有数据,就读取B的栈顶数据
解题过程
var CQueue = function() {
this.A = []; // 创建A,用于存储数据
this.B = []; // 创建B,用于存储A的栈顶数据
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function(value) {
this.A.push(value); // A中存储数据
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function() {
if (!this.A.length && !this.B.length) {
return -1 // AB中均没有数据,说明队列为空,返回-1
}
if (!this.B.length) { // 如果B为空,就要向A索取数据
while (this.A.length) {
let temp = this.A.pop();
this.B.push(temp)
}
return this.B.pop()
} else {
return this.B.pop() // 如果B不为空,直接返回B的栈顶数据
}
};
/**
* Your CQueue object will be instantiated and called as such:
* var obj = new CQueue()
* obj.appendTail(value)
* var param_2 = obj.deleteHead()
*/