Given the head
of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.
Example 1:
Input: head = [1,1,2]
Output: [1,2]
Example 2:
Input: head = [1,1,2,3,3]
Output: [1,2,3]
Constraints:
- The number of nodes in the list is in the range
[0, 300]
. -100 <= Node.val <= 100
- The list is guaranteed to be sorted in ascending order.
- Saturday, 07 August, 2021
- Time Complexity:
$O(n)$ - Space Complexity:
$O(1)$ - Runtime: 4 ms, faster than 93.35% of C online submissions for Remove Duplicates from Sorted List.
- Memory Usage: 6.4 MB, less than 68.84% of C online submissions for Remove Duplicates from Sorted List.
Refer to 237. Delete Node in a Linked List.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *deleteDuplicates(struct ListNode *head) {
struct ListNode *curr = head;
while (curr != NULL && curr->next != NULL) {
if (curr->val == curr->next->val) {
curr->next = curr->next->next;
} else {
curr = curr->next;
}
}
return head;
}
- If we need to free deleted nodes?