package utils // Queue implementation type Node struct { Value interface{} Next *Node } type Queue struct { Head *Node Tail *Node } func (q *Queue) Enqueue(value interface{}) { node := &Node{Value: value} if q.Head == nil { q.Head = node q.Tail = node return } q.Tail.Next = node q.Tail = node } func (q *Queue) Dequeue() interface{} { if q.Head == nil { return nil } node := q.Head q.Head = node.Next if q.Head == nil { q.Tail = nil } return node.Value } func (q *Queue) Peek() interface{} { if q.Head == nil { return nil } return q.Head.Value } func (q *Queue) IsEmpty() bool { return q.Head == nil }