Allora, supponi di avere una struttura del genere
codice:
// definisco puntatore a struttura nodo
typedef pnode *struct node
// definisco struttura nodo
struct node {
int info;
pnode next;
}
A questo punto la soluzione iterativa è immediata
codice:
// Funzione iterativa per la ricerca del primo pari
// Passo la testa della lista già caricata
pnode trovaPrimoPari(pnode lista) {
// dichiaro una lista temporanea per scorrere
// la lista in input
pnode i;
// scorro la lista
for(i=lista; i!=NULL; i=i->next) {
// verifico che l'elemento trovato sia pari
// ovvero se la divisione per 2 ha come resto 0
if(i->info%2==0) {
// Ritorno il nodo che contiene tale numero
return i;
}
}
// Se arrivo qui non ho trovato il numero pari
// quindi ritorno NULL
return NULL;
}
La soluzione ricorsiva è immediata
codice:
// Funzione ricorsivaper la ricerca del primo pari
// Passo l'iesimo nodo della lista già caricata
// La prima volta passo la testa
pnode trovaPrimoPariRic(pnode lista) {
// Caso Base 1: lista vuota
if(lista==NULL) {
// Nono ho trovato il numero pari
return NULL;
}
// Caso Base 2: trovo il primo numero pari
if(lista->info%2==0) {
// Ho trovato il numero pari
// Ritorno il nodo che contiene il primo
// numero pari
return lista;
}
// Se arrivo qui eseguo ricorsione
// sul resto della lista
return trovaPrimoPariRic(lista->next);
}
Capito???