Questa è la funzione che ha lo scopo di inserire un valore x in una lista ordinata in modo crescente
codice:
void insertSorted(list& h, int x) {
/* inserisce ricorsivamente, in ordine crescente */
if (h == NULL) {
h = createNode(x);
return ; }
if ( h->dato > x ) {
h = insertHead(h, createNode(x));
return ; }
insertSorted(h->next),x); }
Nel momento in cui è verificata la condizione del secondo if giustamente mi si viene a creare un nuovo nodo contenente il dato inserito x e questo nodo viene inserito nella testa della lista ricevuta.
Mettiamo il caso che il valore x sia compreso tra il primo e il secondo nodo. Quindi inizialmente le condizione dei 2 if non vengono verificate e la funzione viene richiamata( e viene inviata la lista a partire dal secondo nodo quindi). A questo punto il valore x è minore di h->dato quindi viene creato il nuovo nodo e inserito prima del secondo nodo. Ora mi chiedo il primo nodo come fa a puntare al nodo creato? Vedendo questa funzione mi verrebbe da dire che il primo nodo e il nodo creato puntino entrambi al secondo nodo quando invece non dovrebbe essere cosi... Non so se mi sono spiegato.