F
francesco
This code doesn't always work, only in some cases, else, it gives me
segmentation fault. It has to insert a new node in a linked list
maintaining an ascending order
struct persona *inserimento_ordinato(struct persona *testa, struct
persona pers){
struct persona *p=NULL, *prec=NULL, *corrente=NULL;
prec=testa;
corrente=testa;
if(corrente==NULL || strcmp(corrente->cognome,pers.cognome)>=0)
{
testa=inserisci_contatto(testa,pers);
printf("\n Primo nodo della lista: testa");
}
else {
while(corrente!=NULL && strcmp(corrente->cognome,pers.cognome)<0){
prec=corrente;
corrente=corrente->next;
printf("prec %p corrente %p corrente->next %p
\n",prec,corrente,corrente->next);
}
p=crea_contatto(pers);// Crea un nuovo nodo da aggiungere alla
lista, nel posto opportuno, per mantenere l'ordinamento
p->next=corrente;
prec->next=p;
printf("\n Inserimento tra due nodi %s e %s",prec->cognome,corrente-
}
return testa;
}
segmentation fault. It has to insert a new node in a linked list
maintaining an ascending order
struct persona *inserimento_ordinato(struct persona *testa, struct
persona pers){
struct persona *p=NULL, *prec=NULL, *corrente=NULL;
prec=testa;
corrente=testa;
if(corrente==NULL || strcmp(corrente->cognome,pers.cognome)>=0)
{
testa=inserisci_contatto(testa,pers);
printf("\n Primo nodo della lista: testa");
}
else {
while(corrente!=NULL && strcmp(corrente->cognome,pers.cognome)<0){
prec=corrente;
corrente=corrente->next;
printf("prec %p corrente %p corrente->next %p
\n",prec,corrente,corrente->next);
}
p=crea_contatto(pers);// Crea un nuovo nodo da aggiungere alla
lista, nel posto opportuno, per mantenere l'ordinamento
p->next=corrente;
prec->next=p;
printf("\n Inserimento tra due nodi %s e %s",prec->cognome,corrente-
stampa_rubrica(testa);cognome);
}
return testa;
}