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???