请用两个栈,实现一个队列
队列:
概念:先进先出
api : add delete length
队列是逻辑结构,抽象模型
简单的,可以用数组、链表实现
复杂的队列服务,需要单独设计
// 思路
1 定义一个原型对象 里面包涵 add delete length
2. 出列的时候要: 先进先出
/**
* 两个栈 一个队列
*/
export class myQueue{
private stack1:number[] = []
private stack2:number[] = []
add(n:number){
this.stack1.push(1)
}
delete():number | null{
let res
const stack1 = this.stack1
const stack2 = this.stack2
// 将stack1所有元素移动到stack2中
while(stack1.length){
const n = stack1.pop()
if(n != null){
stack2.push(n)
}
}
res = stack2.pop()
// 将stack2中的元素返回给stack1
while(stack2.length){
const n = stack2.pop()
if(n != null){
stack1.push(n)
}
}
return res || null
}
get length ():number{
return this.stack1.length
}
}
时间复杂度 add O(1) \delete O(n)
空间复杂度整体是O(n)