剑指offer JS题解 (5)用两个栈实现队列

题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

解题思路

栈是LIFO的结构,队列是FIFO的结构,使用两个栈构建队列,则可以在push的时候,将元素存入第一个栈。当需要pop操作的时候,将第一个栈中的元素弹出并压入第二个栈,这时先前较早进入第一个栈的元素会来到第二个栈的栈顶,实现FIFO。

虽然只需要实现push和pop两个函数,但实现过程中是需要注意一些细节的,具体可以根据第二个栈的状态进行划分:
一、push:
直接压入第一个栈就行。
二、pop:
1、第二个栈为空:将第一个栈的所有元素依次弹出并压入第二个栈,最后弹出栈顶的元素;(当第一个栈也为空的时候,pop不出元素)
2、第二个栈非空:直接弹出栈顶元素。

Code

const outStack=[],
      inStack=[];
function push(node)
{
    // write code here
    inStack.push(node);
}
function pop()
{
    // write code here
    if(!outStack.length){
        while(inStack.length){
            outStack.push(inStack.pop());
        }
    }
    return outStack.pop();
}

运行环境:JavaScript (V8 6.0.0)
运行时间:12ms
占用内存:5352k

猜你喜欢

转载自blog.csdn.net/qq_40340478/article/details/106131070