#include <stdio.h>
#include <stdlib.h>
struct nodoLista {
int valore;
struct nodoLista *nextPtr;
};
typedef struct nodoLista Lista;
void suf_insert(Lista **ptrPtr, int val);
void print_list(Lista *ptr);
void intersection(Lista *list1, Lista *list2, Lista **destPtr);
int main() {
Lista *l1 = NULL, *l2 = NULL;
suf_insert(&l1, 9);
suf_insert(&l1, 5);
suf_insert(&l1, 11);
suf_insert(&l1, 42);
suf_insert(&l1, 7);
print_list(l1);
suf_insert(&l2, 7);
suf_insert(&l2, 13);
suf_insert(&l2, 22);
suf_insert(&l2, 5);
print_list(l2);
Lista *l3 = NULL;
intersection(l1, l2, &l3);
print_list(l3);
return 0;
}
void suf_insert(Lista **ptrPtr, int val) {
while(*ptrPtr != NULL) {
ptrPtr = &((*ptrPtr)->nextPtr);
}
Lista *tmpPtr = *ptrPtr;
*ptrPtr = malloc(sizeof(Lista));
(*ptrPtr)->valore = val;
(*ptrPtr)->nextPtr = tmpPtr;
}
void print_list(Lista *ptr) {
while(ptr != NULL) {
printf("%d ", ptr->valore);
ptr = ptr->nextPtr;
}
printf("\n");
}
void intersection(Lista *list1, Lista *list2, Lista **destPtr) {
//Bisogna guardare quali valori delle due liste si ripetono tra di loro e metterli nella nuova lista destPtr
Lista *temp;
temp = list2; //Si fa questa variabile per poi tornare a puntare all'inizio per scorrere di nuovo ogni valore di list2
while(list1 != NULL) {
while(list2 != NULL){
if (list1->valore == list2->valore){
suf_insert(destPtr, list1->valore); //Basta usare inserimento in testa usato prima per mettere in l3
}
list2 = list2->nextPtr; //Aggiorno L2 ad ogni ciclo, così eventualmente arriva a NULL
}
list1 = list1->nextPtr; //Aggiorno L1 ad ogni ciclo, così eventualmente arriva a NULL
list2 = temp; //Riaggiorno L2 ad ogni ciclo di L1, così per ogni valore di L1 scorre tutto L2
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: