232. 用栈实现队列

用栈实现队列

解法一: 双栈

go
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
type MyQueue struct {
stack1 *[]int
stack2 *[]int
}

func Constructor() MyQueue {
return MyQueue{
stack1: &[]int{},
stack2: &[]int{},
}
}

func (this *MyQueue) Push(x int) {
stack1 := *(this.stack1)
stack1 = append(stack1, x)
this.stack1 = &stack1
}

func (this *MyQueue) Pop() int {
stack2 := *(this.stack2)
if len(stack2) > 0 {
ans := stack2[len(stack2)-1]
stack2 = stack2[:len(stack2)-1]
this.stack2 = &stack2
return ans
}
this.stack12Stack2()
return this.Pop()
}

func (this *MyQueue) Peek() int {
stack2 := *(this.stack2)
if len(stack2) > 0 {
return stack2[len(stack2)-1]
}
this.stack12Stack2()
return this.Peek()
}

func (this *MyQueue) Empty() bool {
stack2 := *(this.stack2)
if len(stack2) > 0 {
return len(stack2) == 0
}
this.stack12Stack2()
stack2 = *(this.stack2)
return len(stack2) == 0
}

func (this *MyQueue) stack12Stack2() {
stack1 := *(this.stack1)
stack2 := *(this.stack2)
if len(stack2) > 0 {
return
}
for len(stack1) > 0 {
stack2 = append(stack2, stack1[len(stack1)-1])
stack1 = stack1[:len(stack1)-1]
}
this.stack1 = &stack1
this.stack2 = &stack2
}

/**
* Your MyQueue object will be instantiated and called as such:
* obj := Constructor();
* obj.Push(x);
* param_2 := obj.Pop();
* param_3 := obj.Peek();
* param_4 := obj.Empty();
*/
作者

wuhunyu

发布于

2024-03-04

更新于

2025-01-15

许可协议