diff options
-rw-r--r-- | 232/go.mod | 5 | ||||
-rw-r--r-- | 232/go.sum | 2 | ||||
-rw-r--r-- | 232/main.go | 93 |
3 files changed, 100 insertions, 0 deletions
diff --git a/232/go.mod b/232/go.mod new file mode 100644 index 0000000..8de9603 --- /dev/null +++ b/232/go.mod @@ -0,0 +1,5 @@ +module 232 + +go 1.19 + +require github.com/emirpasic/gods v1.18.1 diff --git a/232/go.sum b/232/go.sum new file mode 100644 index 0000000..b5ad666 --- /dev/null +++ b/232/go.sum @@ -0,0 +1,2 @@ +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= diff --git a/232/main.go b/232/main.go new file mode 100644 index 0000000..718e526 --- /dev/null +++ b/232/main.go @@ -0,0 +1,93 @@ +package main + +import ( + "fmt" + + "github.com/emirpasic/gods/stacks/arraystack" +) + +type MyQueue struct { + s1 *arraystack.Stack + s2 *arraystack.Stack +} + +func Constructor() MyQueue { + s1 := arraystack.New() + s2 := arraystack.New() + + q := MyQueue{s1: s1, s2: s2} + + return q +} + +func (this *MyQueue) Push(x int) { + this.s1.Push(x) +} + +func (this *MyQueue) Pop() int { + for { + if val, ok := this.s1.Pop(); ok { + this.s2.Push(val) + } else { + break + } + } + + val, _ := this.s2.Pop() + + for { + if val, ok := this.s2.Pop(); ok { + this.s1.Push(val) + } else { + break + } + } + + return val.(int) +} + +func (this *MyQueue) Peek() int { + for { + if val, ok := this.s1.Pop(); ok { + this.s2.Push(val) + } else { + break + } + } + + val, _ := this.s2.Pop() + this.s2.Push(val) + + for { + if val, ok := this.s2.Pop(); ok { + this.s1.Push(val) + } else { + break + } + } + + return val.(int) + +} + +func (this *MyQueue) Empty() bool { + return this.s1.Empty() +} + +/** + * 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(); + */ + +func main() { + obj := Constructor() + obj.Push(1) + obj.Push(2) + fmt.Println(obj.Peek()) + fmt.Println(obj.Pop()) + fmt.Println(obj.Empty()) +} |