Você está na página 1de 3

Faça um programa que leia duas sequências de nomes de pessoas e

armazene-os em duas listas simplesmente encadeadas L1 e L2,


respectivamente. Em seguida, o programa deve criar uma terceira
lista encadeada, contendo os nomes comuns às duas listas e mostrar
a lista resultante.
Exemplo:
- L1 = Joana, Laura, Sérgio, Fábio.
- L2 = Anita, Joaquim, Fábio, Joana, Pedro, Sílvia.
- L3 = Joana, Fábio.

#include <iostream.h>
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

struct LISTA
{
char nome[40];
LISTA* prox;
};

LISTA* inserir(LISTA* l, char nome[40])


{
LISTA *novo, *aux;

novo = new LISTA();


strcpy(novo->nome, nome);
novo->prox = NULL;
// inserção no fim da lista
if(l == NULL)
l = novo;
else{
aux = l;
while(aux->prox != NULL)
aux = aux->prox;
aux->prox = novo;
}
return l;
}

LISTA* desalocar(LISTA *L)


{
LISTA *aux;
while(L != NULL)
{
aux = L;
L = L->prox;
delete(aux);
}
return NULL;
}
void main()
{
// a lista está vazia, logo, L1 e L2 terão o valor NULL
// L1 e L2 conterão o endereço do primeiro elemento da lista
LISTA *L1 = NULL;
LISTA *L2 = NULL;
LISTA *L3 = NULL;
// os ponteiros novo e aux são auxiliares
LISTA *aux1, *aux2;
// apresentando o menu de opções
int achou;
char nome[40];

// Leitura dos números da 1ª lista


cout << "\n Lista 1 \n Digite um nome ('fim' para parar):";
gets(nome);
while(strcmpi(nome,"fim")!=0)
{
L1 = inserir(L1, nome);
cout << "\n Lista 1 \n Digite um nome ('fim' para
parar):";
gets(nome);
}
// Leitura dos números da 2ª lista
cout << "\n Lista 2 \n Digite um nome ('fim' para parar):";
gets(nome);
while(strcmpi(nome,"fim")!=0)
{
L2 = inserir(L2, nome);
cout << "\n Lista 2 \n Digite um nome ('fim' para
parar):";
gets(nome);
}
// Criando a lista contendo os nomes em comum nas duas listas
aux1 = L1;
while(aux1 != NULL)
{
aux2 = L2;
achou = 0;
while(aux2 != NULL)
{
if(strcmpi(aux1->nome,aux2->nome)==0)
{
achou = 1;
}
aux2 = aux2->prox;
}
if(achou == 1)
L3 = inserir(L3, aux1->nome);
aux1 = aux1->prox;
}
// Impressão da lista em comum
if(L3 == NULL)
cout << "\n As listas não possuem nomes em comum.";
else
{
cout << "\n Nomes presentes em ambas as listas: ";
aux1 = L3;
while(aux1 != NULL)
{
cout << "\n\t" << aux1->nome << " ";
aux1 = aux1->prox;
}
}
L1 = desalocar(L1);
L2 = desalocar(L2);
L3 = desalocar(L3);
}

Você também pode gostar