Skip to content

Commit 1d58561

Browse files
Merge pull request #3 from codewithme-py/feat/remove-duplicates-from-sorted-list-0083
problem solution & test 0083
2 parents 9c4a06d + 9c59579 commit 1d58561

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class ListNode:
2+
def __init__(self, val: int = 0, next: 'ListNode | None' = None):
3+
self.val = val
4+
self.next = next
5+
6+
7+
class Solution:
8+
def deleteDuplicates(self, head: ListNode | None) -> ListNode | None:
9+
"""Remove all duplicates from a sorted linked list
10+
(keep only one occurrence).
11+
"""
12+
if not head:
13+
return None
14+
curr = head
15+
while curr.next:
16+
if curr.val == curr.next.val:
17+
curr.next = curr.next.next
18+
else:
19+
curr = curr.next
20+
return head
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from solutions.remove_duplicates_from_sorted_list_0083 import ListNode, Solution
2+
3+
4+
def list_to_linked_list(arr):
5+
if not arr:
6+
return None
7+
head = ListNode(arr[0])
8+
curr = head
9+
for val in arr[1:]:
10+
curr.next = ListNode(val)
11+
curr = curr.next
12+
return head
13+
14+
15+
def linked_list_to_list(head):
16+
res = []
17+
curr = head
18+
while curr:
19+
res.append(curr.val)
20+
curr = curr.next
21+
return res
22+
23+
24+
def test_delete_duplicates():
25+
sol = Solution()
26+
27+
head1 = list_to_linked_list([1, 1, 2])
28+
result1 = sol.deleteDuplicates(head1)
29+
assert linked_list_to_list(result1) == [1, 2]
30+
31+
head2 = list_to_linked_list([1, 1, 2, 3, 3])
32+
result2 = sol.deleteDuplicates(head2)
33+
assert linked_list_to_list(result2) == [1, 2, 3]
34+
35+
assert sol.deleteDuplicates(None) is None
36+
37+
head3 = ListNode(5)
38+
result3 = sol.deleteDuplicates(head3)
39+
assert linked_list_to_list(result3) == [5]
40+
41+
head4 = list_to_linked_list([7, 7, 7, 7])
42+
result4 = sol.deleteDuplicates(head4)
43+
assert linked_list_to_list(result4) == [7]
44+
45+
head5 = list_to_linked_list([1, 2, 3, 4])
46+
result5 = sol.deleteDuplicates(head5)
47+
assert linked_list_to_list(result5) == [1, 2, 3, 4]

0 commit comments

Comments
 (0)