题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
分析:
栈用数组模拟,队列只允许在队首进行出队(即delete/pop删除 )操作,队尾进行入队(即insert/push插入)操作,因此其中一个栈stack1用于入队,另一个栈stack2用于出队,出队时判断出队栈stack2是否为空:
- 空则将入队栈stack1中的元素全部转移至出队栈stack2,然后出队栈stack2栈顶元素出队即可。
- 非空,则出队栈stack2栈顶元素直接出队。
求解:
// 数组模拟
class CQueue {
pushStack: number[];
popStack: number[];
constructor() {
this.pushStack = [];
this.popStack = [];
}
appendTail(value: number): void {
this.pushStack.push(value);
}
deleteHead(): number {
if (this.pushStack.length === 0 && this.popStack.length === 0) {
// 队列为空
return -1;
}
// 出队的栈为空时,依次将入队的栈中元素先入出队的栈
if (this.popStack.length === 0) {
while (this.pushStack.length) {
this.popStack.push(this.pushStack.pop()!);
}
}
return this.popStack.pop()!;
}
}