Judie 发表于 2021-4-7 03:45:39

【朱迪的LeetCode刷题笔记】82. Remove Duplicates from Sorted List II #Medium #C


82. Remove Duplicates from Sorted List II #Medium

Given the head of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well.


Example 1:

Input: head =
Output:


Example 2:

Input: head =
Output:


Constraints:

The number of nodes in the list is in the range .
-100 <= Node.val <= 100
The list is guaranteed to be sorted in ascending order.


C

/**
* Definition for singly-linked list.
* struct ListNode {
*   int val;
*   struct ListNode *next;
* };
*/


struct ListNode* deleteDuplicates(struct ListNode* head) {
    struct ListNode *before = NULL;
    struct ListNode *current = head;
    if (head == NULL) {
      return NULL;
    }
    struct ListNode *next = head->next;
    while (next) {
      if (current->val == next->val) {
            while (next && current->val == next->val) {
                current = current->next;
                next = next->next;
            }
            if (next == NULL) {
                if (before == NULL) {
                  return NULL;
                }
                before->next = NULL;
                return head;
            }
            current = current->next;
            next = next->next;
            if (before == NULL) {
                head = current;
            } else {
                before->next = current;
            }
      } else {
            before = current;
            current = current->next;
            next = next->next;
      }   
    }
    return head;
}


不愧是medium 想了三天qwq

页: [1]
查看完整版本: 【朱迪的LeetCode刷题笔记】82. Remove Duplicates from Sorted List II #Medium #C