题目:
用两个栈,实现一个队列
包括功能:添加队列、删除元素、队列长度
思路:
什么是队列
队列是先进先出。
简单的可以用数组、链表实现
复杂的队列服务,需要单独设计
栈我们用数组来实现
队列的添加 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
}
}
测试用例: