¿Cómo obtener los elementos comunes de los dos conjuntos en una lista enlazada?

Tengo 2 listas vinculadas, quiero comparar ambas listas e imprimir todos los elementos comunes que aparecen en ambas listas. Intenté que todo no puede hacerlo funcionar.

struct Node *calcIntersection(struct Node *headA, struct Node *headB) { struct Node * link1 = headA; struct Node * link2 = headB; while(link1 != NULL) { if (link2->value == link2->value) { printf("%d", link1->value); } link1 = link1 -> pNext; } return link1; } 

Estás cerca, en realidad tu método debería verse así:

 struct Node *calcIntersection(struct Node *headA, struct Node *headB) { struct Node *link1 = headA; while(link1 != NULL) { struct Node *link2 = headB; while (link2 != NULL) { if (link1->value == link2->value) { printf("%d", link1->value); } link2 = link2->pNext; } link1 = link1->pNext; } return link1; } 

No estoy muy seguro de lo que está regresando allí, pero en la mayoría de las situaciones devolverá NULL, no estoy seguro si eso es lo que quiere.

OK .. Esto parece ser tarea … así que señalaré algunas cosas que son bastante obvias en el código de arriba

1) La condición que está verificando (link2-> value == link2-> value) es probablemente un error tipográfico. Es posible que haya querido decir link2-> value == link1-> value.
2) Está iterando sobre cada elemento en la lista 1 pero NO en la lista 2. Por lo tanto, está comprobando solo si el primer elemento en la lista 2 se encuentra en la lista 1.

Creo que esto es suficiente … por ahora … 🙂

 if (link2->value == link2->value) 

Debiera ser

 if (link1->value == link2->value) 

Como señaló gbulmer, también debes iterar sobre la segunda lista y compararla con la primera.