questo esercizio mi ha spiazzato un pò..praticamente non saprei da dove cominciare

codice:
 
typedef struct nodo *lista; 
typedef struct nodo {
		int val;
		lista next;
}nodo;

/* Function:  confrontaListe
 * Usage: L = confrontaListe (L1, L2, &n)
 * -----------------------------------------------
 * Confronta uno ad uno gli elementi corrispondenti delle due liste L1 e L2, che devono 
 * avere uguale lunghezza, costruendo una nuova lista L che contiene gli  elementi
 * corrispondenti che risultano uguali. Se L1 e L2 hanno lunghezza diversa,  
 * restituisce NULL. Il parametro di output n conta il numero di elementi corrispondenti  
 * uguali 
 */
ho pensato, scorro le due liste contemporaneamente:
codice:
lista confrontaListe(lista L1, lista L2, int *n)
{
nodo *corrente1;
      nodo *precedente1;
      nodo *corrente2;
      nodo *precedente2;
      while (corrente1==NULL&&corrente2==NULL){
            precedente1=corrente1;
            precedente2=corrente2;
            corrente1=corrente1->next;
            corrente2=corrente2->next;
            if (corrente1->val==corrente2->val){
             //appendi nodo alla nuova lista
             //incrementa n (non so come)
           }}
            }

la strada è giusta?