Ir ao conteúdo
  • Cadastre-se

C Intercalar uma lista encadeada em C


Igor Vargas

Posts recomendados

Olá estou tentando fazer um exercicio onde preciso intercalar 2 listas encadeadas. Mas a minha função só esta retornando um numero apenas.

 

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


typedef struct LISTA{
	
	int dado;
	struct LISTA *prox; 
	
}lista;

typedef struct LISTA2{
	
		int dado;
		struct LISTA2 *prox;
	
}lista2;


lista *insere(lista *p, int valor){
	
	lista *novo;
	novo=(lista*)malloc(sizeof(lista));
	novo->dado = valor;
	novo->prox = p;
	return novo;
		
}

void imprime(lista *l){
	lista *p = l;
	for(p = l; p != NULL; p=p->prox){
		printf("%d-",p->dado);
	}
	
	
}

lista* intercala (lista* l, lista2* l2){		

		lista *li = (lista*)malloc(sizeof(lista));
		lista *p1;
		lista2 *p2;
	
		for(p1 =l, p2 =l2; p1!= NULL && p2!=NULL; p1 =p1->prox, p2=p2->prox){
			li->dado = p1->dado;
			li->prox = p1->prox;
			li->dado = p2->dado;
			li->prox = p2->prox;
			
			
		}
		return li;
}



main(){
	
lista *l;
lista2 *l2;
 l  = NULL;
 l2 = NULL;
 
 	l = insere(l, 1);
	l = insere(l, 2);
	l = insere(l, 3);
	imprime(l);
	printf("\n");
 	l2 = insere(l2, 4);
	l2 = insere(l2, 5);
	l2 = insere(l2, 6);
	imprime(l2);
	printf("\n");
//concatena(l,l2);
	//imprime(l);
	l =intercala (l,l2);
	imprime(l);
	
	
	
}

 

Link para o comentário
Compartilhar em outros sites

Olá, tudo bem?

 

 

Então, você precisa definir a lista 'li' como tendo a soma da quantidade de dados nas duas listas. Por exemplo se uma lista A tem 4 elementos e outra lista B tem 8 elementos a lista C, que terá os elemento interpolados de A e B, terá 12 elementos. 

 

Dica: Use a função ´insere´ na implementação da função ´intercala´, pois o princípio é o mesmo; Pense em como adicionar um a um dos dados de cada uma das listas ( A, B )  em uma terceira lista ( C ).

Atenção: Você precisa somente copias o valor do dado.

 

Dica extra: Os identificadores (nomes de: funções, struct e variáveis) estão péssimos, mas isso é o menos importante, por hora.

 

 

OK!? Tchau.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

... acho que você não me entendeu.

 

Naquele raciocínio, nós não precisamos alocar toda memória necessária de uma vez, basicamente, nós passaremos os dados das duas listas para uma terceira dinamicamente usando para isso a função  ´insere´.

 

Não quero dar mais detalhes, pois vou se não acaberei te dando uma resposta.

Mas fica aproximadamente assim:

        A e B, C são listas.


                C =  insere (C, A->dado);
                C =  insere (C, B->dado);


                A =  A->prox;
                B =  B->prox;

 

 

Comentário: Nesse caso, preservamos a integridade as listas ( A, B ), no mesmo tempo criamos uma lista C com todos os dados de A e B, sem com isso sabermos ao certo o tamanho de A e B. Quando falei do tamanho era apenas uma argumente secundário. Esqueça o tamanho, concentre-se em o como usar a função ´insere´ no problema da função ´intercala´.

 

 

11 horas atrás, Igor Vargas disse:

Ou seja minha 3 lista precisa ter 32 certo?

R: Sim, e mais, não necessitamos alocar tudo de uma vez, para aos poucos, já existe a função: ´insere´.

 

 

Ok!? Tchau.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!