Ir para conteúdo
Fórum Script Brasil
  • 0

Lista encadeadas - Merge


RS25

Pergunta

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 merge

Alguém poderia ajudar?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...