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(); */
|