# NC76.用两个栈实现队列

用两个栈来实现一个队列,完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

要求:空间复杂度 O(n) ,时间复杂度 O(1)

输入:
["PSH1","PSH2","POP","POP"]
返回值:1,2
说明:
"PSH1":代表将1插入队列尾部
"PSH2":代表将2插入队列尾部
"POP“:代表删除一个元素,先进先出=>返回1
"POP“:代表删除一个元素,先进先出=>返回2  
1
2
3
4
5
6
7
8

# 思路:

栈的特点是先进后出,队列的特点是先进先出,基于上述的两种不同规则的数据结构,我们可以想到,如果把其中的一个栈的数据,全部翻转之后,倾倒到另一个栈中,此时第一个栈中元素的顺序和第二栈中元素的顺序正好相反,根据栈的性质,原来的栈底元素,变成了栈顶元素。

其中需要特别注意的一点是,在倾倒的时候,保证另一个栈必须是空的,否则顺序是不对的。

const stackPush = [];
const stackPop = [];

function push(node) {
  stackPush.push(node);
}
function pop(){
  if (stackPop.length === 0 && stackPush.length === 0) {
    return -1;
  } else {
    if(stackPop.length === 0) {
      while(stackPush.length) {
        stackPop.push(stackPush.pop());
      }
    }
  }
  return stackPop.pop();
}
module.exports = {
  push : push,
  pop : pop
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
最后更新时间: 10/13/2021, 9:37:18 PM