Skip to content

Commit b4da66e

Browse files
author
eminencegrs
committed
Solve LeetCode #83 'Remove Duplicates from Sorted List' [Easy].
1 parent 052f06a commit b4da66e

3 files changed

Lines changed: 102 additions & 0 deletions

File tree

  • LeetCode
    • src/LeetCode.Challenges/Problems00xx/N_0083_RemoveDuplicatesFromSortedList
    • tests/LeetCode.Challenges.UnitTests/Problems00xx/N_0083_RemoveDuplicatesFromSortedList
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace LeetCode.Challenges.Problems00xx.N_0083_RemoveDuplicatesFromSortedList;
2+
3+
public class ListNode(int value = 0, ListNode? next = null)
4+
{
5+
public int Value { get; set; } = value;
6+
public ListNode? Next { get; set; } = next;
7+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace LeetCode.Challenges.Problems00xx.N_0083_RemoveDuplicatesFromSortedList;
2+
3+
public static class Solution
4+
{
5+
public static ListNode? DeleteDuplicates(ListNode? head)
6+
{
7+
if (head?.Next == null)
8+
{
9+
return head;
10+
}
11+
12+
var previous = head;
13+
var current = head.Next;
14+
while (current != null)
15+
{
16+
if (current.Value == previous.Value)
17+
{
18+
previous.Next = current.Next;
19+
}
20+
else
21+
{
22+
previous = current;
23+
}
24+
25+
current = current.Next;
26+
}
27+
28+
return head;
29+
}
30+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using LeetCode.Challenges.Problems00xx.N_0083_RemoveDuplicatesFromSortedList;
2+
using Shouldly;
3+
using Xunit;
4+
5+
namespace LeetCode.Challenges.UnitTests.Problems00xx.N_0083_RemoveDuplicatesFromSortedList;
6+
7+
public class SolutionTests
8+
{
9+
[Theory]
10+
[MemberData(nameof(TestCases))]
11+
public void GivenListNode_WhenDeleteDuplicates_ThenResultAsExpected(ListNode? head, ListNode? expectedResult)
12+
{
13+
Solution.DeleteDuplicates(head).ShouldBeEquivalentTo(expectedResult);
14+
}
15+
16+
public static IEnumerable<object[]> TestCases()
17+
{
18+
// Case 1: List with duplicates [1, 1, 2] -> [1, 2]
19+
var head = new ListNode(1, new ListNode(1, new ListNode(2)));
20+
var expectedResult = new ListNode(1, new ListNode(2));
21+
yield return [head, expectedResult];
22+
23+
// Case 2: List with all elements identical [1, 1, 1] -> [1]
24+
head = new ListNode(1, new ListNode(1, new ListNode(1)));
25+
expectedResult = new ListNode(1);
26+
yield return [head, expectedResult];
27+
28+
// Case 3: List with interspersed duplicates [1, 2, 2, 3] -> [1, 2, 3]
29+
head = new ListNode(1, new ListNode(2, new ListNode(2, new ListNode(3))));
30+
expectedResult = new ListNode(1, new ListNode(2, new ListNode(3)));
31+
yield return [head, expectedResult];
32+
33+
// Case 4: List with trailing duplicates [1, 2, 3, 3, 4] -> [1, 2, 3, 4]
34+
head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(3, new ListNode(4)))));
35+
expectedResult = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4))));
36+
yield return [head, expectedResult];
37+
38+
// Case 5: List with no duplicates [1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
39+
head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5)))));
40+
expectedResult = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5)))));
41+
yield return [head, expectedResult];
42+
43+
// Case 6: Single-node list [1] -> [1]
44+
head = new ListNode(1);
45+
expectedResult = new ListNode(1);
46+
yield return [head, expectedResult];
47+
48+
// Case 7: Empty list -> Empty list
49+
head = null;
50+
expectedResult = null;
51+
yield return [head!, expectedResult!];
52+
53+
// Case 8: Complex list with duplicates [1, 1, 1, 2, 2, 3, 3] -> [1, 2, 3]
54+
head = new ListNode(
55+
1, new ListNode(
56+
1, new ListNode(
57+
1, new ListNode(
58+
2, new ListNode(
59+
2, new ListNode(
60+
3, new ListNode(3)))))));
61+
62+
expectedResult = new ListNode(1, new ListNode(2, new ListNode(3)));
63+
yield return [head, expectedResult];
64+
}
65+
}

0 commit comments

Comments
 (0)