Ciao a tutti, ho realizzato questa funzione:
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;
}
}
}
che fa inserire un nodo in maniera ordinata in una lista.
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:
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;
}
}
secondo voi, qual'è la versione più "corretta" o quantomeno performante?