aiuto ricorsione lista con doppio puntatore
Inviato: sabato 14 giugno 2014, 15:14
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
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
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;
}
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