栈的顺序为后进先出,而队列的顺序为先进先出。使用两个栈实现队列,一个元素需要经过两个栈才能出队列,在经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就是先进先出顺序。
js写法:
// js写法
var MyQueue = function () {
// 让数组模拟栈
// stack1作为输入栈,stack2作为输出栈
this.stack1 = []
this.stack2 = []
};
/**
* @param {number} x
* @return {void}
*/
MyQueue.prototype.push = function (x) {
return this.stack1.push(x)
};
/**
* @return {number}
*/
MyQueue.prototype.pop = function () {
if(this.stack2.length == 0){
while(this.stack1.length){
this.stack2.push(this.stack1.pop())
}
}
return this.stack2.pop()
};
/**
* @return {number}
*/
MyQueue.prototype.peek = function () {
const x = this.pop()
this.stack2.push(x)
return x
};
/**
* @return {boolean}
*/
MyQueue.prototype.empty = function () {
return !(this.stack1.length>0 || this.stack2.length>0)
};
java写法:
class MyQueue {
private Stack<Integer> in = new Stack<>();
private Stack<Integer> out = new Stack<>();
public void push(int x) {
in.push(x);
}
public int pop() {
in2out();
return out.pop();
}
public int peek() {
in2out();
return out.peek();
}
private void in2out() {
if (out.isEmpty()) {
while (!in.isEmpty()) {
out.push(in.pop());
}
}
}
public boolean empty() {
return in.isEmpty() && out.isEmpty();
}
}