| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | 
							- 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
 
- }
 
 
  |