共计 963 个字符,预计需要花费 3 分钟才能阅读完成。
请你仅应用两个栈实现先入先出队列。队列该当反对个别队列反对的所有操作(push
、pop
、peek
、empty
):
实现 MyQueue
类:
void push(int x)
将元素 x 推到队列的开端int pop()
从队列的结尾移除并返回元素int peek()
返回队列结尾的元素boolean empty()
如果队列为空,返回true
;否则,返回false
解题思路
- 栈后进先出,队列先进先出;
- 双栈能够实现序列倒置:增加元素的时候间接
push
到stack1
。当须要删除队首元素时,仅仅须要出栈stack2
即可;如果stack2
为空,则循环出栈stack1
并将出栈元素进栈stack2
,循环完结后元素曾经倒置,再出栈stack2
即可;
代码实现
class MyQueue {private stack1: number[];
private stack2: number[];
constructor() {this.stack1 = [];
this.stack2 = [];}
// 将元素退出队尾
push(x: number): void {this.stack1.push(x);
}
// 从队列结尾移除元素
pop(): number {if (this.stack2.length) {return this.stack2.pop();
}
if (!this.stack1.length) return -1;
while (this.stack1.length) {this.stack2.push(this.stack1.pop());
}
return this.stack2.pop();}
// 返回队列结尾的元素
peek(): number {if (this.stack2.length) {return this.stack2[this.stack2.length - 1];
}
if (!this.stack1.length) return -1;
while (this.stack1.length) {this.stack2.push(this.stack1.pop());
}
return this.stack2[this.stack2.length - 1];
}
// 返回队列是否为空
empty(): boolean {return (this.stack2.length === 0 && this.stack1.length === 0);
}
}
正文完
发表至: typescript
2021-08-24