ti ho corretto l'inserimento.codice:temp = (struct nodo*)malloc(sizeof(struct nodo)); strcpy(temp->nome, buffer); printf("Inserire il valore di concentrazione di inquinante:\n"); scanf("%lf", &temp->dato); temp->next = NULL; if (p==NULL) //se la lista e' vuota { p=temp; } else //se la lista non e' vuota { if(temp->dato > p->dato) { temp->next = p; } else while (p->next!=NULL) //finche' non termina la lista { if (temp->dato > p->next->dato) //se il nuovo dato e' maggiore dell'elemento successivo nella lista { temp->next = p->next; p->next = temp; } else //se non è maggiore consideriamo l'elemento successivo { p = p->next; } } if(p->next == NULL) { //siamo arrivati alla fine della lista senza inserire l'elemento p->next = temp; } }
A dire il vero non sono sicuro che sia corretto visto che torno da 5 ore di macchina e non l'ho neanche testato, potrei aver fatto qualche errore logico o qualche errore di battitura.
Di sicuro non ha senso continuare ad allocare nuovi nodi e copiare dati visto che il vero vantaggio delle liste è appunto poter muovere dati copiando solo puntatori.