aiuto ricorsione lista con doppio puntatore

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
antonx
Prode Principiante
Messaggi: 142
Iscrizione: sabato 14 giugno 2014, 15:11

aiuto ricorsione lista con doppio puntatore

Messaggio da antonx »

Salve a tutti ragazzi! avrei bisogno di un aiuto, siccome nessuno mi ha mai spiegato i doppi puntatori e quando ho eliminato qualcosa da una lista mi sono sempre fatto ritornare la lista.Mi potreste aiutare perfavore?
ecco il mio codice

Codice: Seleziona tutto

void esercitazione (struct elemento **top,struct elemento **top2){
printf("quale elemento vuoi cancellare?\n");
int n;
scanf("%d",&n);
if(*top!=NULL && *top2 !=NULL){
eliminalo(top,n);
eliminalo(top2,n);
}
else
    return;
}

void eliminalo(struct elemento **top,int n){
    struct elemento *e=NULL;
if(*top!=NULL){
    if((*top)->x==n){
        if((*top)->prec==NULL){
                e=(*top);
               (*top)=((*top)->next);
               (*top)->prec=NULL;
               free (e);
            }
             else if((*top)->next==NULL){
                e=(*top)->prec;
                free(*top);
                e->next=NULL;
                *top=e;
             }
              else{
                 e=*top;
                 (*top)->prec->next=(*top)->next;
                 (*top)->next->prec=(*top)->prec;
                 (*top)=(*top)->next;
                  free(e);
             }
}
eliminalo(&((*top)->next),n);
}
else
return;
}


int main()
{
    struct elemento *top=NULL;
    struct elemento *top2=NULL;
    printf("quanti elementi vuoi inserire nella prima lista?\n");
    int n,i,x,m;
    scanf("%d",&n);
    for(i=0;i<n;i++){
       scanf("%d",&x);
       insordine(&top,x);
    }
    printf("quanti elementi vuoi inserire nella seconda lista?\n");
    scanf("%d",&m);
    for(i=0;i<m;i++){
       scanf("%d",&x);
       insordine(&top2,x);
    }
    //top=pre_prova(top,top2);
    esercitazione(&top,&top2);
    printf("\n\n\n");
    stampa(top);
    printf("\n\n\n");
    stampa(top2);
    return 0;
}
ora vi spiego il problema che mi da il codice: metto i valore 1 2 3 4 5 nelle due liste
se voglio eliminare 1 tutto apposto
se voglio eliminare 2 mi elimina anche il 3
se voglio eliminare 3 elimina anche il 4
se voglio eliminare il 4 si blocca
se voglio eliminare il 5 si blocca
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: aiuto ricorsione lista con doppio puntatore

Messaggio da ienaplinsky »

Potresti postare la struttura e il resto delle funzioni mancanti?
Cosi è più semolice aiutarti
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti