关于typescript:Leetcode-232-用栈实现队列

52次阅读

共计 963 个字符,预计需要花费 3 分钟才能阅读完成。

请你仅应用两个栈实现先入先出队列。队列该当反对个别队列反对的所有操作(pushpoppeekempty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的开端
  • int pop() 从队列的结尾移除并返回元素
  • int peek() 返回队列结尾的元素
  • boolean empty() 如果队列为空,返回 true;否则,返回 false

解题思路

  • 栈后进先出,队列先进先出;
  • 双栈能够实现序列倒置:增加元素的时候间接 pushstack1。当须要删除队首元素时,仅仅须要出栈 stack2 即可;如果 stack2 为空,则循环出栈 stack1 并将出栈元素进栈 stack2,循环完结后元素曾经倒置,再出栈 stack2 即可;

代码实现

class MyQueue {private stack1: number[];
  private stack2: number[];

  constructor() {this.stack1 = [];
    this.stack2 = [];}

  // 将元素退出队尾
  push(x: number): void {this.stack1.push(x);
  }

  // 从队列结尾移除元素
  pop(): number {if (this.stack2.length) {return this.stack2.pop();
    }
    if (!this.stack1.length) return -1;
    while (this.stack1.length) {this.stack2.push(this.stack1.pop());
    }
    return this.stack2.pop();}

  // 返回队列结尾的元素
  peek(): number {if (this.stack2.length) {return this.stack2[this.stack2.length - 1];
    }
    if (!this.stack1.length) return -1;
    while (this.stack1.length) {this.stack2.push(this.stack1.pop());
    }
    return this.stack2[this.stack2.length - 1];
  }

  // 返回队列是否为空
  empty(): boolean {return (this.stack2.length === 0 && this.stack1.length === 0);
  }
}

正文完
 0