题干

我的解答
class CQueue {
a: Array<number>;
b: Array<number>;
constructor() {
this.a = new Array<number>();
this.b = new Array<number>();
}
appendTail(value: number): void {
this.a.push(value);
}
deleteHead(): number {
let vel:number;
let reNum:number;
this.b.length = 0;
if(this.a.length==0){
return -1
}
vel = this.a.pop();
while(vel){
this.b.push(vel)
vel = this.a.pop()
}
reNum = this.b.pop();
vel = this.b.pop();
while(vel){
this.a.push(vel)
vel = this.b.pop()
}
return reNum;
}
}
结果

实例代码
class CQueue {
private stackA: number[];
private stackB: number[];
constructor() {
this.stackA = [];
this.stackB = [];
}
appendTail(value: number): void {
this.stackA.push(value);
}
deleteHead(): number {
if (this.stackB.length) {
return this.stackB.pop()!;
} else {
while (this.stackA.length) {
this.stackB.push(this.stackA.pop()!);
}
if (!this.stackB.length) {
return -1;
} else {
return this.stackB.pop()!;
}
}
}
}
思考
- 多了一步循环,实例上第一次返回时颠倒一下,后面就直接弹栈,我这边每次还还原了导致浪费多余的资源,只要完成两个方法就好,不需要管存储下来的结构是不是和原始一样的。