Skip to content

Instantly share code, notes, and snippets.

@kiambogo
Created May 7, 2021 04:59
Show Gist options
  • Save kiambogo/5e4b5937213cb89ddea776f95bd170fa to your computer and use it in GitHub Desktop.
Save kiambogo/5e4b5937213cb89ddea776f95bd170fa to your computer and use it in GitHub Desktop.
Go Queue
package main
import "log"
type Node struct {
val int
next *Node
}
type Queue struct {
first *Node
last *Node
}
func (q Queue) Peek() *Node {
return q.first
}
func (q *Queue) Remove() *Node {
if q.IsEmpty() {
return nil
}
val := q.first
q.first = q.first.next
if q.first == nil {
q.last = nil
}
return val
}
func (q *Queue) Add(node *Node) {
if q.last != nil {
q.last.next = node
}
q.last = node
if q.first == nil {
q.first = node
}
}
func (q Queue) IsEmpty() bool {
return q.first == nil
}
func main() {
queue := &Queue{}
assert(true, queue.IsEmpty())
assert((*Node)(nil), queue.Peek())
assert((*Node)(nil), queue.Remove())
queue.Add(&Node{val: 1})
queue.Add(&Node{val: 2})
queue.Add(&Node{val: 3})
assert(false, queue.IsEmpty())
assert(1, queue.Peek().val)
assert(1, queue.Remove().val)
assert(2, queue.Remove().val)
assert(3, queue.Remove().val)
assert(true, queue.IsEmpty())
assert((*Node)(nil), queue.Remove())
}
func assert(expected, actual interface{}) {
if expected != actual {
log.Panicf("%s != %s", expected, actual)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment