用两个栈实现一个队列
题目:
- 用两个栈,实现一个队列
- 包括功能:添加队列、删除元素、队列长度
思路:
- 什么是队列
- 队列是先进先出。
- 简单的可以用数组、链表实现
- 复杂的队列服务,需要单独设计
- 栈我们用数组来实现
- 队列的添加 add
- 往 stack1 中push 元素
- 队列删除
- 将stack1 中的所有元素pop出来,push到stack2中
- 执行 stack2.pop() 将stack2中顶部元素出栈
- 最后将stack2中所有元素都pop出来,push到stack1中
代码实现:
/** * @description 两个栈实现 一个队列 * @author ykk */ export class MyQueue { private stack1: unknown[] = []; private stack2: unknown[] =[]; /** * 入队 */ add(n:unknown){ this.stack1.push(n) } delete(){ // 将 stack1 所有元素移动到 stack2 中 while(this.stack1.length){ this.stack2.push(this.stack1.pop()) } //删除stack2顶部元素,即队列的头部 const res = this.stack2.pop() // 将 stack2 所有元素“还给”stack1 while(this.stack2.length){ this.stack1.push(this.stack2.pop()) } // 返回删除的元素 return res || null } //队列长度 get length (): number{ return this.stack1.length } }
测试用例:

浙公网安备 33010602011771号