Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] spiegazione di 2 funzioni

    mi spiegate concettualmente come lavora queste 2 funzioni
    nel primo come si costruisce la lista temp?

    codice:
    hello *invord(hello *p)
    {
    	hello *temp;
    	
    	if (p == NULL || p->next == NULL)
    		return p;
    	else {
    		temp = invord(p->next);
    		p->next->next = p;
    		p->next = NULL;
    		return temp;
    	}
    }
    codice:
    void stampainv(hello *p)
    {
    	if (p != NULL) {
    		stampainv(p->next);
    		printf("%d -> ", p->n);
    	}
    }
    live free or die

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    La prima funzione mi sembra che fa il reverse della lista, cioè il primo elemento diventa l'ultimo, il secondo diventa il penultimo, ecc ecc...

    Difatti puoi notare che la procedura viene prima invocata ricorsivamente sulla lista a partire dal secondo elemento ( invord(p->next) ), in questo modo a temp viene assegnata il reverse della lista che va dal secondo all'ultimo elemento, per completare l'operazione, quello che era l'originario primo elemento, cioè p, viene agganciato alla fine della lista reversed ottenuta, con l'operazione

    p->next->next = p;


    in quanto p->next era l'originario secondo elemento, che pero e diventato l'ultimo nella lista temp dopo l'operazione di reverse.


    L'altra funzione mi pare che stampi la lista al contrario, in quanto la procedura viene chiamata ricorsivamente prima sulla lista a partire dal secondo elemento, e alla fine si stampa il primo.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.