题目:
请你使用两个栈实现先入先出队列。
实现 MyQueue
类:
void push(int x)
将元素 x 推到队列的末尾int pop()
从队列的开头移除并返回元素int peek()
返回队列开头的元素boolean empty()
如果队列为空,返回true
;否则,返回false
思路
队列:先入先出
栈:先入后出
二者的入栈与入队列没有区别
二者的区别在于出栈与出队列
我们把入队列的元素保存在栈stk中,出队列就是出栈底元素。我们把除了栈底元素以外的元素全部转移到另一个临时栈_stk中保存,栈stk中的唯一剩余元素就是我们要删除的
var MyQueue = function() {
this.stk=[];
this._stk=[];
};
/**
* @param {number} x
* @return {void}
*/
MyQueue.prototype.push = function(x) {
this.stk.push(x);
};
/**
* @return {number}
*/
MyQueue.prototype.pop = function() {
if(this.stk.length>1){
this._stk.push(this.stk.pop())
}
let ans = this.stk.shift();
while(this._stk.length){
this.stk.push(this._stk.pop())
}
return ans;
};
/**
* @return {number}
*/
MyQueue.prototype.peek = function() {
return this.stk[0];
};
/**
* @return {boolean}
*/
MyQueue.prototype.empty = function() {
if(!this.stk.length){
return true;
}else{
return false;
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* var obj = new MyQueue()
* obj.push(x)
* var param_2 = obj.pop()
* var param_3 = obj.peek()
* var param_4 = obj.empty()
*/