/* Copiare una lista in una nuova lista */ lista copia( lista l ) { /* versione iterativa */ puntatore x, coda; lista new = NULL; while( l != NULL ) { x = newNodo() x->dato = l->dato; x->next = NULL; if( new == NULL ) new = coda = x; else { coda->next = x; coda = x; } l = l->next; } return new; } /* ricordando la funzione cons definita negli esercizi precedenti si puņ modificare .... */ lista copia( lista l ) { /* versione iterativa */ puntatore x, coda; lista new = NULL; while( l != NULL ) { x = cons(l->dato, NULL) if( new == NULL ) new = x; else { coda->next = x; coda = x; } l = l->next; } return new; } /* versione ricorsiva di coda */ lista copia( lista l, lista new, puntatore coda) { puntatore x = newNodo(); if( l == NULL ) return new; x->dato = l->dato; x->next = NULL; if( new == NULL ) return copia( l->next, x, x); coda->next = x; return copia( l->next, new, x); } /* coda indica l'ultimo elemento della nuova lista. Se new == NULL č il primo elemento .... */ /* versione ricorsiva */ lista copia(lista l) { if( l == NULL ) return NULL; return cons( x->dato, copia(l->next) ); /* creo un nuovo elemento che ha come campo next la lista che si ottiene copiando i rimanenti elementi della lista l */ } In pratica creo un nodo, inserisco l'informazione nel campo dato e tengo in sospeso l'informazione da inserire nel campo next. Solo quando ho terminato la prima lista so che informazione inserire ... Ricordo che la funzione cons crea un nodo inizializzandolo con i dati in ingresso.