diff --git a/datastructure/queue/linkedqueue.go b/datastructure/queue/linkedqueue.go index 6aac8ac..93c6ff8 100644 --- a/datastructure/queue/linkedqueue.go +++ b/datastructure/queue/linkedqueue.go @@ -3,6 +3,7 @@ package datastructure import ( "errors" "fmt" + "reflect" "github.com/duke-git/lancet/v2/datastructure" ) @@ -41,6 +42,7 @@ func (q *LinkedQueue[T]) IsEmpty() bool { return q.length == 0 } + // Enqueue put element into queue func (q *LinkedQueue[T]) Enqueue(value T) { newNode := datastructure.NewQueueNode(value) @@ -102,3 +104,15 @@ func (q *LinkedQueue[T]) Print() { info += " ]" fmt.Println(info) } + +// Contain checks if the value is in queue or not +func (q *LinkedQueue[T]) Contain(value T) bool { + current := q.head + for current != nil { + if reflect.DeepEqual(current.Value, value) { + return true + } + current = current.Next + } + return false +} diff --git a/datastructure/queue/linkedqueue_test.go b/datastructure/queue/linkedqueue_test.go index e08221d..4fe8de9 100644 --- a/datastructure/queue/linkedqueue_test.go +++ b/datastructure/queue/linkedqueue_test.go @@ -82,3 +82,16 @@ func TestLinkedQueue_Clear(t *testing.T) { queue.Clear() assert.Equal(true, queue.IsEmpty()) } + +func TestLinkedQueue_Contain(t *testing.T) { + assert := internal.NewAssert(t, "TestLinkedQueue_Contain") + + queue := NewLinkedQueue[int]() + + queue.Enqueue(1) + queue.Enqueue(2) + queue.Enqueue(3) + + assert.Equal(true, queue.Contain(1)) + assert.Equal(false, queue.Contain(4)) +}