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?