[C言語][LeetCode][82]Remove Duplicates from Sorted List II


タイトル


Remove Duplicates from Sorted List II Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example, Given 1->2->3->3->4->4->5, return 1->2->5. Given 1->1->1->2->3, return 2->3.

タブ


Linked List

難易度


中程度

ぶんせき


タイトルは、順序付けされた単一チェーンテーブルを指定し、重複するノードをすべて削除し、重複するノード自体を含め、新しいチェーンテーブルに戻ることを意味します.最終的なヘッダノードを記録するノードを作成します.

Cコード実装

struct ListNode* deleteDuplicates(struct ListNode* head) 
{
    struct ListNode *p, *q, *ret;
    struct ListNode * list = (struct ListNode *)malloc(sizeof(struct ListNode));

    p = head;
    q = list;

    while(p)
    {
        if(p->next && (p->val == p->next->val))
        {
            while(p->next && (p->val == p->next->val))
            {
                p = p->next;
            }
        }
        else
        {
            q->next = p;
            q = p;
        }
        p = p->next;
    }

    if(q)
        q->next = NULL;

    ret = list->next;

    if(list)
        free(list);

    return ret;
}