Cancellare Elemento Lista

di il
1 risposte

Cancellare Elemento Lista

Ciao A tutti,
tra i vari esercizi cè quello di creare una funzione che permetta la cancellazione di un elemento di una lista.
Questo è quello a cui ho pensato ma...da il risultato sperato.
Potreste aiutarmi?
Grazie mille.

Elemento *Cancella(Elemento *p,int Valore)
{
 Elemento *Curr,*Prec;
    Prec=NULL;
    Curr=p;
    while(Curr!=NULL && Valore>Curr->Info)
    {
        Prec=Curr;
        Curr=Curr->next;
    }
    if(Valore==Curr->Info)
    {
        if(Prec==NULL){
            p=Curr->next;
        }else{
            Prec->next=Curr->next;
        }
        free(Curr);
    }
return p;
}

1 Risposte

  • Re: Cancellare Elemento Lista

    Ciao, premetto che la tua richiesta di aiuto non è affatto chiara...

    MarcoRayRaimondi ha scritto:


    while(Curr!=NULL && Valore>Curr->Info)
    Si tratta di una lista ordinata presumo, altrimenti non avrebbe senso quel secondo controllo.
    In ogni caso cosa succede se il ciclo termina perché Curr è uguale a NULL?

    Ti faccio notare che modificando un po' la funzione potresti fare a meno delle variabili Prec e Curr. Inoltre se all'interno della lista ci sono più elementi uguali a Valore e vuoi eliminarli tutti, come fai a sapere quante volte richiamare la funzione?

    In base alle suddette due osservazioni imposterei la funzione nel seguente modo:
    int Cancella(Elemento **p, int Valore)
    {
        ...
    }
    In questo modo lanciando
    Elemento *lista;
    ...
    stampa_lista(lista);
    while(Cancella(&lista, 5));
    stampa_lista(lista);
    otterresti un output del genere:
    5 7 5 2 0 6 7 5 3
    7 2 0 6 7 3
Devi accedere o registrarti per scrivere nel forum
1 risposte