c语言链表删除重复项

void RemoveDuplicates(Node** phead){
    Node* p=*phead;
    Node* prep=(Node*)malloc(sizeof(Node));
    Node* q=(Node*)malloc(sizeof(Node));
    Node* preq=(Node*)malloc(sizeof(Node));
    prep->next=p;
    while(p!=NULL){
        q=p->next;
        
        while(q!=NULL){
            preq->next=q;
            if(q->data==p->data){
                if(q->next==NULL){    
                if(p==*phead){
                        
                    *phead=p->next;
                    free(p);
                        
                        }
                else{

                    prep->next=p->next;
                    free(p);}
                }
                preq->next=q->next;
                free(q);
                
            }
            preq=q;
            q=q->next;
            
            
            }
        
        prep=p;
        p=p->next;
    }
    
}

需要将重复项全部删除原来的项也要删除,不知道哪里有问题

供参考:

void RemoveDuplicates(Node*& L)
{
    Node *p = L->next,  *preq,  *q;
    while (p != NULL)
    {
        preq = p;
        q = p->next;
        while (q) {
            if (q->data == p->data){
                preq->next = q->next;
                free(q);
                q = preq->next;
            }
            else{
                preq = q;
                q = q->next;
            }
        }
        p = p->next;
    }
}

你可以对比下我博客中的单链表操作,刚好有你要的