题目描述
用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。队列中的元素为 int 类型。
解题方法
let stack1=[],// 两个数组模拟栈的行为
stack2=[];
function push(node)
{
// write code here
// 栈是后入先出(LIFO),队列是先入先出(FIFO)
// 模拟队列的 push 操作,直接往栈中推入即可
// 但是要考虑辅助栈中还存在值的情况,需要先将辅助栈中的值推回存储栈中
while(stack2.length !== 0){
stack1.push(stack2.pop());
}
stack1.push(node);
}
function pop()
{
// write code here
// 模拟队列的 pop 操作则要考虑栈的后入先出特性,需要先将存储栈中的数组,推入辅助栈,然后辅助栈弹出
while(stack1.length !== 0){
stack2.push(stack1.pop());
}
return stack2.pop();
}
拓展——用两个队列实现一个栈的 pop 和 push 操作
本质上和上面的没什么区别,只要抓住一点,栈是后入先出(LIFO),队列是先入先出(FIFO)。下面是实现代码。
let queue1=[],// 两个数组模拟队列的行为
queue2=[];
function push(node) {
// 推入的时候要判断哪个队列中有值,就推入那个队列中
if(queue1.length === 0){
queue2.push(node);
}else{
queue1.push(node);
}
}
function pop() {
// 弹出的时候判断哪个队列中有值,则先将该队列中的 n - 1 个值弹出并存入另一个队列中,然后弹出最后一个值则为结果
if(queue1.length === 0){
while(queue2.length !== 1){
queue1.push(queue2.pop());
}
return queue2.pop();
}else{
while(queue1.length !== 1){
queue2.push(queue1.pop());
}
return queue1.pop();
}
}