From 2ef9b56d22996256bcee303fc920e7aa59c5e887 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Sun, 5 Jun 2022 16:41:16 +0800 Subject: [PATCH] feat: add Contain function for LinkedQueue --- datastructure/queue/linkedqueue.go | 14 ++++++++++++++ datastructure/queue/linkedqueue_test.go | 13 +++++++++++++ 2 files changed, 27 insertions(+) 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)) +}