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
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