RS25 Postado Abril 13, 2011 Denunciar Share Postado Abril 13, 2011 Fazer uma função que recebendo duas listas por parâmetro retorne a lista que intercala estas duas listas.E devera usar o prótotipo Lista* merge(Lista*l1, Lista*l2);Eu tentei fazer desta maneira#include <stdio.h> #include <stdlib.h> typedef struct lista { int info; struct lista* prox; } Lista; Lista* lista_cria() { return NULL; } Lista* lista_insere (Lista* l, int i) { Lista* novo = (Lista*) malloc(sizeof(Lista)); novo->info = i; novo->prox = l; return novo; } void lista_imprime (Lista* l) { Lista* p; /* variavel auxiliar para percorrer a lista */ for (p = l; p != NULL; p = p->prox) printf("info = %d\n", p->info); } /* função separa */ Lista* merge (Lista* l1, Lista*l2) { Lista* p; /* variável auxiliar para percorrer a lista */ Lista* q; /* variável auxiliar para nova lista */ for (p = l1; p != NULL; p = p->prox) if (p->info == n) { q = p->prox; p->prox = NULL; return q; } return NULL; } Lista* lista_libera (Lista* l) { Lista* p = l; while (p != NULL) { Lista* t = p->prox; /* guarda referencia para prox elto */ free(p); /* libera a memoria apontada por p */ p = t; /* faz p apontar para proximo elto */ } return NULL; } main() { Lista* l; Lista* l2; int n; l = lista_cria(); l = lista_insere(l, 23); l = lista_insere(l, 45); l = lista_insere(l, 67); l = lista_insere(l, 89); l = lista_insere(l, 1011); printf("\nLista original:\n"); lista_imprime(l); //criando e imprimindo a lista l2 //l2 = lista_cria(); l2 = lista_insere(l, 30); l2 = lista_insere(l, 44); l2 = lista_insere(l, 69); l2 = lista_insere(l, 90); l2 = lista_insere(l, 1013); printf("\nLiberando a memoria...\n"); l = lista_libera(l); printf("\nLista depois da juncao:\n"); merge(l1,l2); getch(); }Só que esta com erro na hora de imprimir a lista com mergeAlguém poderia ajudar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Abril 16, 2011 Denunciar Share Postado Abril 16, 2011 Saudações,Faça as seguintes alterações no seu código:- Sempre que possível, inicialize a lista ("l2") para que tenha certeza das informações quando consultá-las.- Você está liberando a lista (uso da função "lista_libera") anter da função "merge"- Procure liberar todas as listas alocadas- Atente-se para a sua função "merge", pois ela retorna um ponteiro para a sua struct ("Lista*")- Na sua função "merge" crie uma nova "Lista*" (lembre-se de inicializá-la), percorra suas listas ("l1" e "l2") e faça uso da função "lista_insere" para fazer o merge entre as duas listas na nova. (Retorne essa nova lista).Obs.: Para facilitar a verificação se deu certo seu merge, faça uso da função "lista_imprime" da lista gerada (pela função "merge").Espero ter ajudado.Abraços,William Rodrigues. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
RS25
Fazer uma função que recebendo duas listas por parâmetro retorne a lista que intercala estas duas listas.
E devera usar o prótotipo Lista* merge(Lista*l1, Lista*l2);
Eu tentei fazer desta maneira
Só que esta com erro na hora de imprimir a lista com merge
Alguém poderia ajudar?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.