Concatenação de listas. Escreva um programa que concatene duas listas de caracteres encadeadas. O programa deverá incluir a função concatenate , que recebe ponteiros para as duas listas como argumentos e concatena a segunda lista com a primeira.
Passo 1
Fala galera, tudo tranquilo? Iremos fazer um código para unir duas listas. Como faremos isso? Primeiro vamos criar a lista 1, onde ela deve ir até um certo ponto e depois criamos a lista 2 que vai dar continuidade a lista 1. Então, após ter criado as duas listas, nós vamos uni-las . Vamos lá!
Dividi em 3 passos: montar a função struct determinando os nós, aplicar as condições e inserir os dados para concatenar.
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *);
struct node *concatenate( struct node *list1,struct node *list2);
struct node *inicio(struct node *start, int data);
struct node *fim(struct node *start,int data);
void display(struct node *start);
iniciando com cabeçalho struct node. Para que possam ir adicionando os nós que iremos usar da linha 2 até a linha 14 (estou citando as linhas no meu código, o de vocês pode ter menos ou mais linhas).
int main () da linha 16 até a linha 31 são os dados que será inseridos nas duas listas.
Da linha 33 a linha 48 são inseridos os pontos para retorno quando as listas estão vazias
struct node *concatenate( struct node *list1,struct node *list2)
{
struct node *ptr;
if(list1==NULL)
{
list1=list2;
return list1;
}
if(list2==NULL)
return list1;
ptr=list1;
while(ptr->link!=NULL)
ptr=ptr->link;
ptr->link=list2;
return list1;
}
Passo 2
Da linha 49 a 69 foram dados os passos de inserir os elementos das listas. Na variável int exite um i e um n. onde serão indicados para número de nós e números que vc vai inserir na lista (estou usando número mas vc pode usar nomes, basta mudar a função int para outra que não seja inteiro, tente com char)
struct node *create_list(struct node *start)
{
int i,n,data;
printf("\nEntre com número de nós : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Entre com os elementos a serem inseridos : ");
scanf("%d",&data);
start=inicio(start,data);
for(i=2;i
{
printf("Entre com os elementos a serem inseridos : ");
scanf("%d",&data);
start=fim(start,data);
}
return start;
}/*Fim da create_list()*/
Da linha 88 a 109 fazemos a alocação e inserimos o ponteiro tempo para os ponteiros inicio e fim.
struct node *inicio(struct node *start,int data)
{
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
temp->info=data;
temp->link=start;
start=temp;
return start;
}/*encerrando inicio()*/
struct node *fim(struct node *start, int data)
{
struct node *p,*temp;
temp= (struct node *)malloc(sizeof(struct node));
temp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=temp;
temp->link=NULL;
return start;
}/*encerrando fim()*/
Irei por imagens do código para vocês!
. É isso galera, espero ter ajudado e vamos para mais um exercício. Valeu!