其他分享
首页 > 其他分享> > 用队列实现栈

用队列实现栈

作者:互联网

目录

题目描述

  1. 题目地址:https://leetcode.cn/problems/implement-stack-using-queues/
  2. 题目要求
    请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

注意:

解题思路

  1. shift()是移除第一项
  2. 一个队列为主队列,一个为辅助队列,当入栈操作时,我们先将主队列内容导入辅助队列,然后将入栈元素放入主队列队头位置,再将辅助队列内容,依次添加进主队列即可。

解题代码

var MyStack = function() {
    this.queue1 = [];
    this.queue2 = [];//备份的队列

};


MyStack.prototype.push = function(x) {
    this.queue1.push(x);

};


MyStack.prototype.pop = function() {
    // 减少两个队列交换的次数, 只有当queue1为空时,交换两个队列
    if(!this.queue1.length) {
        [this.queue1, this.queue2] = [this.queue2, this.queue1];
    }
    while(this.queue1.length > 1) {//当队列1的元素数量大于1的时候不断将元素push进备份队列
        this.queue2.push(this.queue1.shift());
    }
    return this.queue1.shift();//最后将队列1最后一个元素出队

};


MyStack.prototype.top = function() {
    const x = this.pop();//查看栈顶,队列出队,然后在push进队列1
    this.queue1.push(x);
    return x;

};

MyStack.prototype.empty = function() {
     return !this.queue1.length && !this.queue2.length;

};


标签:queue1,队列,queue2,pop,实现,push,MyStack
来源: https://www.cnblogs.com/xiayuxue/p/16601421.html