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.