LeetCode-232.用栈实现队列

题目详解

相关链接

思路

  • 利用两个栈来模拟

看完代码随想录之后的想法

  • 重点是利用第二个栈来模拟出队列行为

实现过程中遇到的困难

  • 注意popStack中已有元素时,不能再向其中push了,否则就乱了(因为popStack的栈顶元素实际是模拟队列顶:即将要出队列的元素)

代码

TypeScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* Your MyQueue object will be instantiated and called as such:
* var obj = new MyQueue()
* obj.push(x)
* var param_2 = obj.pop()
* var param_3 = obj.peek()
* var param_4 = obj.empty()
*/

class MyQueue {
pushStack: number[]
popStack: number[]
constructor() {
this.pushStack = []
this.popStack = []
}

push(x: number): void {
this.pushStack.push(x)
}

pop(): number {
if (!this.popStack.length) {
while (this.pushStack.length) this.popStack.push(this.pushStack.pop())
}
return this.popStack.pop()
}

peek(): number {
const top = this.pop()
this.popStack.push(top)
return top
}

empty(): boolean {
return !(this.pushStack.length || this.popStack.length)
}
}

收获

  • 一定要懂得复用,功能相近的函数要抽象出来,不要大量的复制粘贴,很容易出问题!(踩过坑的人自然懂)
-------- 本文结束 感谢阅读 --------
0%