Questa è la funzione che ha lo scopo di inserire un valore x in una lista ordinata in modo crescente
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.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); }
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.

Rispondi quotando