diff --git a/DataStructures.Tests/LinkedList/CircularLinkedListTests.cs b/DataStructures.Tests/LinkedList/CircularLinkedListTests.cs index 8e5128c96..bc8ddc751 100644 --- a/DataStructures.Tests/LinkedList/CircularLinkedListTests.cs +++ b/DataStructures.Tests/LinkedList/CircularLinkedListTests.cs @@ -175,4 +175,20 @@ private static string GetDisplayOutput(CircularLinkedList list) return result.ToString().Trim(); } + + [Test] + public static void InsertAfter_InsertingAfterTail_UpdatesTailAndPreservesHead() + { + var list = new CircularLinkedList(); + list.InsertAtEnd(10); + + list.InsertAfter(10, 20); + + var head = list.GetHead(); + Assert.That(head, Is.Not.Null); + Assert.That(head!.Data, Is.EqualTo(10)); + Assert.That(head.Next, Is.Not.Null); + Assert.That(head.Next!.Data, Is.EqualTo(20)); + Assert.That(head.Next.Next, Is.SameAs(head)); + } } diff --git a/DataStructures/LinkedList/CircularLinkedList/CircularLinkedList.cs b/DataStructures/LinkedList/CircularLinkedList/CircularLinkedList.cs index 097feea7e..5245da5cd 100644 --- a/DataStructures/LinkedList/CircularLinkedList/CircularLinkedList.cs +++ b/DataStructures/LinkedList/CircularLinkedList/CircularLinkedList.cs @@ -97,6 +97,11 @@ public void InsertAfter(T value, T data) newNode.Next = current.Next; current.Next = newNode; + if (tail! == current) + { + tail = newNode; + } + return; }