Stai creando un ciclo: pNodo punterà sempre e solo a pNodo e perderai il resto della lista.codice:pNodo->next = *l; //salvo il vecchio nodo testa *l = pNodo; //valorizzo il nodo testa con il nuovo nodo inserito (*l)->next = pNodo; //collego il nuovo nodo testa con il vecchio
Non è vero perché tecnicamente potrebbe essere <= (anche se non nel tuo caso)codice:if(strcmp(prodotto.codP, pCorrente->info.codP) < 0){//inserimento non in coda alla lista
Puoi cambiare questo blocco di codice
con questo molto più semplicecodice:while (pCorrente->next != NULL && strcmp(prodotto.codP, pCorrente->info.codP) > 0){//scansiono la lista finchè il nodo corrente punta ad un elemento non NULL e finchè il prodotto da inserire non ha un codice prodotto inferiore a quello del nodo corrente printf("\nEntrato4\n"); pPrec = pCorrente; pCorrente = pCorrente->next;//assegno a pCorrente il riferimento del nodo successivo } /* concatenazione del nuovo record */ if(strcmp(prodotto.codP, pCorrente->info.codP) < 0){//inserimento non in coda alla lista printf("\nEntrato5\n"); pNodo->next = pCorrente;//collegamento tra il nuovo nodo e il suo successivo pPrec->next = pNodo;//collegamento tra il nodo precedente e quello nuovo } else if(pCorrente->next == NULL) {//inserimento in coda alla lista printf("\nEntrato6\n"); pCorrente->next = pNodo;//collegamento della coda della lista al nuovo nodo }
codice:while (pCorrente != NULL && strcmp(prodotto.codP, pCorrente->info.codP) > 0){ pPrec = pCorrente; pCorrente = pCorrente->next;//assegno a pCorrente il riferimento del nodo successivo } pNodo->next = pCorrente;//collegamento tra il nuovo nodo e il suo successivo pPrec->next = pNodo;//collegamento tra il nodo precedente e quello nuovo

Rispondi quotando
