Ciao a tutti, ho realizzato questa funzione:
che fa inserire un nodo in maniera ordinata in una lista.codice:void inserisci_nodo(nodo* &list) { //crea il nodo nodo* new_node = NULL; new_node = new nodo; cout<<"Inserire il valore del nuovo nodo: "; cin>>new_node->info; new_node->next = NULL; // cerca la posizione nel quale inserirlo if(list == NULL) //se la lista e' vuota bisogna collegare direttamente il nodo alla lista { list = new_node; } else //altrimenti bisogna cercare la posizione nella quale inserire il nodo { if(new_node->info < list->info) { new_node->next = list; list = new_node; } else { nodo* curr = list; //nodo temporaneo che controlla se il valore del nodo nodo* prec = list; while(curr != NULL && curr->info < new_node->info) { prec = curr; curr = curr->next; } prec->next = new_node; new_node->next = curr; } } }
Funziona al 100%.
L'algoritmo di cui sopra l'ho fatto io seguendo una mia logica che non mi sento di definire scorretta, ma vedo che online tutti usano algoritmi di questo tipo:
secondo voi, qual'è la versione più "corretta" o quantomeno performante?codice:void inserisci_nodo(nodo* &list) { //crea il nodo da inserire nodo* new_node = NULL; new_node = new nodo; cout<<"Inserire il valore del nuovo nodo: "; cin>>new_node->info; new_node->next = NULL; // cerca la posizione nel quale inserirlo nodo* curr = list; nodo* prec = NULL; while(curr != NULL && curr->info < new_node->info) { prec = curr; curr = curr->next; } if(prec == NULL) { new_node->next = list; list = new_node; } else { prec->next = new_node; new_node->next = curr; } }

Rispondi quotando