leetcode トピック ノート 82 ソート済みリスト II 内の重複要素を削除する

ソートされたリンク リストの先頭を指定して head 、 元のリンク リスト内の重複する番号を持つすべてのノードを削除し、異なる番号だけを残します 。ソートされたリンクリストを返します  。

アイデア 1: 質問の意味をシミュレートする

struct ListNode* deleteDuplicates(struct ListNode* head){
    if (head == NULL || head->next == NULL) return head;
    struct ListNode nhead = {NULL, 0};
    struct ListNode* p1 = head;
    struct ListNode* p2 = &nhead;
    int n,value;
    while (p1) {
        struct ListNode* tmp = p1;
        for (n = 0,value = p1->val; p1 != NULL && p1->val == value; ++n)
            p1 = p1->next;
        if (n == 1) {  
            p2->next = tmp;
            p2 = tmp;
        }
    }
    p2->next = NULL;
    return nhead.next;
}

分析します:

この質問では、重複する要素はすべて削除されます。新しいリンク リストを作成することを検討できます。重複する要素がある場合は、新しいリンク リストには入れず、最終的に新しいリンク リストを出力します。リンク リスト操作では、元の位置を記録するために別のリンク リストを使用する必要があります。n==1 の場合、p2 が tmp を指すようにし、最後に nhead を出力します。

要約:

この質問は、リンクされたリストの削除操作を調べます。つまり、要素が繰り返されているかどうかを判断し、繰り返されている場合は新しいリンクされたリストに追加されず、最終的に返されます。

おすすめ

転載: blog.csdn.net/si_mple_/article/details/132326817