#include<stdio.h>
#include<stdlib.h>

typedef struct tlista{
    int id;
    struct tlista *prox;
}TLista;

TLista* adiciona(TLista *lista, int valor){
    TLista* novo = (TLista*)malloc(sizeof(TLista));
    novo->id = valor;
    novo->prox = lista;
    return novo;
}

TLista* intersecao(TLista* l1, TLista* l2){

    TLista* lista = NULL;

    TLista* aux = l1;
    TLista* aux2 = l2;

    while(aux!= NULL){
        while(aux2 != NULL){
            if(aux->id == aux2->id){

                lista = adiciona(lista, aux->id);
            }
            aux2 = aux2->prox;
        }
        aux = aux->prox;
        aux2 = l2;
    }

    return lista;
}

void imprime(TLista*l){
    if(l!=NULL){
        printf("          %d\n", l->id);
        imprime(l->prox);
    }
}

int main(){

    TLista* tlista1 = NULL;
    TLista* tlista2 = NULL;
    int i;

    printf("Lista 1     Lista 2\n\n");

    for(i=0; i<20; i++){

        tlista1 = adiciona(tlista1, i);
        tlista2 = adiciona(tlista2, i*2);
        printf("   %d           %d\n", tlista1->id, tlista2->id);
    }

    TLista* tlista3 = NULL;

    tlista3 = intersecao(tlista1, tlista2);

    printf("\n       Lista 3 \n\n");
    imprime(tlista3);
}
