type MyStack struct { Peek Queue Body Queue } /** Initialize your data structure here. */ func Constructor() MyStack { return MyStack{make([]int, 0), make([]int, 0)} } /** Push element x onto stack. */ func (this *MyStack) Push(x int) { this.Peek.Enqueue(x) if this.Peek.Size() == 2 { this.Body.Enqueue(this.Peek.Dequeue()) } } /** Removes the element on top of the stack and returns that element. */ func (this *MyStack) Pop() int { n := this.Body.Size() top := this.Peek.Dequeue() for i := 0; i < n-1; i++ { this.Peek.Enqueue(this.Body.Dequeue()) } this.Peek, this.Body = this.Body, this.Peek return top } /** Get the top element. */ func (this *MyStack) Top() int { return this.Peek.Front() } /** Returns whether the stack is empty. */ func (this *MyStack) Empty() bool { return this.Peek.Empty() } /** * Your MyStack object will be instantiated and called as such: * obj := Constructor(); * obj.Push(x); * param_2 := obj.Pop(); * param_3 := obj.Top(); * param_4 := obj.Empty(); */ // Queue ... type Queue []int // Dequeue ... func (q *Queue) Dequeue() int { front := (*q)[0] *q = (*q)[1:] return front } // Enqueue ... func (q *Queue) Enqueue(x int) { *q = append(*q, x) } // Front ... func (q Queue) Front() int { return q[0] } // Size ... func (q Queue) Size() int { return len(q) } // Empty ... func (q Queue) Empty() bool { return len(q) == 0 }