/* data una lista ed un intero copiare in una nuova lista tutti i numeri < x */ versione ricorsiva se vuota(lista) allora restituisci la lista vuota se il dato < x crea un nuovo elemento, copia il dato e poni nel campo next la lista con i rimanenti elementi < x restituisci l'indirizzo del nuovo elemento altrimenti restituisci la lista dei rimanenti elementi < x lista copiaMinori(lista l, int x) { if( l == NULL ) return NULL; if( l->dato < x ) return cons( l->dato, copiaMinori(l->next, x) ); return copia(l->next, x); } puntatore cons( int x, lista next ) { puntatore p = newdato(); p->dato = x; p->next = next; return p; } /* ricorsiva di coda ..... */ lista copia( lista l, int x, lista new, puntatore coda ) { puntatore p; if( l == NULL ) return new; if( l->dato < x ) { p = cons( l->dato, NULL ); if( new == NULL ) return copia(l->next, x, p, p); coda->next = p; return copia(l->next, x, new, p); } return copia(l->next, x, new, coda); }