Salve mi scuso per il precedente post non conforme alle regole del forum ma sono giorni che lavoro a questo problema e non riesco a risolverlo!!!
Ho implementato un algoritmo per l'inserimento e la cancellazione di un nodo all'interno di una lista semplice ordinatacodice:#include <stdio.h> #include <stdlib.h> s truct nodo { int elemento; //campo che contiene il valore struct nodo* next; //campo che contiene il punt al prossimo nodo }; //function che inserisce il nuovo nodo struct nodo* Insert(struct nodo* lista, int elemento); //function che stampa la lista per intero void Stampa(struct nodo *lista); // function che conta gli elementi int contaC(struct nodo *lista); //controllo che non ci siano doppioni struct nodo * elimDoppi (struct nodo * lista); int presente (int elemento, struct nodo * lista); int main() { //inizializzo la lista!!! struct nodo* lista = NULL; int totale=0; lista = Insert(lista,9); lista = Insert(lista,9); lista = Insert(lista,31); lista = Insert(lista,15); lista = Insert(lista,1); lista = Insert(lista,11); lista = Insert(lista,15); //stampo la lista con i doppioni!!! printf("CON I DOPPIONI: \n "); Stampa(lista); lista = elimDoppi (lista); //conto quanti elementi ho nella lista!!! totale=contaC(lista); printf("\n\n NUMERO DEGLI ELEMENTI DELLA LISTA = %d. \n", totale); //stampo la lista senza doppioni!!! Stampa(lista); getchar(); return(0); } struct nodo* Insert(struct nodo* lista, int elemento) { struct nodo * nuovo= malloc(sizeof(struct nodo)); //alloco nuovo nodo nuovo->elemento = elemento; //gli assegno un determinato valore if(lista==NULL) //lista nulla { lista=nuovo; nuovo->next=NULL; } else { struct nodo *q=lista; if(nuovo->elemento < q->elemento) { int appoggio=nuovo->elemento; nuovo->elemento= q->elemento; q->elemento=appoggio; } while(q->next != NULL && q->next->elemento < nuovo->elemento){ q=q->next; } if(q->next==NULL){ nuovo->next=NULL; } else { nuovo->next=q->next; } q->next=nuovo; } return(lista); } //voglio eliminare i doppioni struct nodo * elimDoppi (struct nodo * lista) { if (lista == NULL) {//LISTA VUOTA return (NULL); } else { if (presente(lista->elemento, lista->next)){ return (elimDoppi(lista->next)); } else {//RICORSIONE lista -> next = elimDoppi (lista -> next); return (lista); } } } int presente (int elemento, struct nodo * lista) { if (lista == NULL){ //LISTA VUOTA return (0); } else { if (lista->elemento ==elemento){ //LISTA 1 ELEMENTO return (1); } else {//RICORSIONE return (presente (elemento, lista-> next)); } } } //voglio contare quanti elementi ci sono in una lista int contaC(struct nodo *lista) { struct nodo* startlista = lista; int totale=0; while(startlista!=NULL) { startlista=startlista->next; totale++; } return totale; } //FUNZIONE CHE STAMPA LA LISTA void Stampa(struct nodo * lista) { struct nodo * startlista= lista; printf("LA LISTA E': \n "); while(startlista!=NULL) { printf("%d ; ", startlista->elemento); startlista=startlista->next; } printf("\n"); }

