Mi sembra di sì, anche se forse potrebbe semplificarsi un po' il codice.
E' un po' che non tratto liste in C e potrei aver fatto qualche sciocchezza (anche se ho provato la funzione e funge...) comunque ho scritto questo codice di esempio
codice:
#include <stdio.h>
#include <stdlib.h>
struct nodo {
char c;
struct nodo *next;
};
typedef struct nodo NODO;
typedef NODO * LINK;
LINK visita(LINK lista1, LINK lista2, int *n) { /*n viene passato per riferimento e ha valore 0*/
LINK temp1 = lista1;
LINK temp2 = lista2;
LINK nuova_lista = (LINK) malloc(sizeof(NODO));
/* poiché le liste hanno uguale lunghezza e poiché vengono scorse parallelamente,
finita l'una sarà finita necessariamente anche l'altra, quindi eseguo il controllo
solo su una di esse */
while ( temp1 != NULL ) {
if ( temp1->c == temp2->c ) {
if ( *n == 0 )
nuova_lista = temp1;
else
nuova_lista->next = temp1;
*n = *n + 1;
}
temp1 = temp1->next;
temp2 = temp2->next;
}
return nuova_lista;
}