Ciao, non mi sono focalizzato più di tanto sulla logica della funzione inserisciInOrdine(), ma aggiustando un paio di cose che mi sono saltate agli occhi sembra funzionare:
- nel main() non hai inizializzato il membro next a nullptr;
- nell'if della funzione inserisciInOrdine() stai utilizzando l'operatore di assegnazione.
In ogni caso, oltre a quanto detto nell'altra discussione
Nippolo ha scritto:
Non c'è bisogno della variabile aux nella funzione print(), puoi usare direttamente l.
io farei qualcosa del genere:
#include <iostream>
#include <string>
using namespace std;
struct nodo
{
    string str;
    nodo *next;
};
typedef nodo* lista;
void inserisci_in_testa(lista &L, const string &s)
{
    nodo *nuovo = new nodo;
    nuovo->str = s;
    nuovo->next = L;
    L = nuovo;
}
void inserisci_in_ordine(lista &L, const string &s)
{
    nodo **p = &L;
    while(*p && (*p)->str < s)
    {
        p = &(*p)->next;
    }
    inserisci_in_testa(*p, s);
}
void print(lista L)
{
    while(L)
    {
        cout << L->str << " ";
        L = L->next;
    }
    cout << endl;
}
int main()
{
    lista L = nullptr;
    inserisci_in_ordine(L, "ciliegia");
    inserisci_in_ordine(L, "arancia");
    inserisci_in_ordine(L, "fragola");
    inserisci_in_ordine(L, "pera");
    inserisci_in_ordine(L, "mela");
    print(L);
}
Infine quel typedef lo toglierei proprio e mi sporcherei di più le mani coi puntatori.