232.用栈实现队列
思路就是用一个切片,每次追加在后面,但是取值从最前面取值。
// 用两个栈来实现队列的先进先出的效果
// peek、push、pop、empty
type MyQueue struct {
push []int
pop []int
}
func Constructor() MyQueue {
return MyQueue {
push: []int{},
pop: []int{},
}
}
func (this *MyQueue) pushToPop() {
// pop 必须是为空的,才可以进行移动
if len(this.pop) == 0 {
push_length := len(this.push) - 1
for push_length >= 0 {
this.pop = append(this.pop, this.push[push_length])
this.push = this.push[:push_length]
push_length--
}
}
}
func (this *MyQueue) Push(x int) {
//
this.push = append(this.push, x)
// 移动
this.pushToPop()
}
func (this *MyQueue) Pop() int {
// 先移动
this.pushToPop()
// if len(this.pop) <= 0 {
// return
// }
top := this.pop[len(this.pop) - 1]
this.pop = this.pop[:len(this.pop) - 1]
return top
}
func (this *MyQueue) Peek() int {
// 先移动
this.pushToPop()
return this.pop[len(this.pop) - 1]
}
func (this *MyQueue) Empty() bool {
this.pushToPop()
return len(this.pop) <= 0
}
/**
* 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();
*/