+ Responder ao Tópico



  1. Intercalar Lista encadeada

    Exemplo Lista1 = 1 , 3 , 5
    Lista2 = 9, ,6 ,8
    Juntas = 1 , 9 , 3 ,6 ,5 ,8

    Preciso Juntar estas duas listas em uma so..


    Lista* juntando (Lista* l1,Lista* l2)
    {

    Lista* nl = (Lista*) malloc(sizeof(Lista));
    Lista* p1 = l1;
    Lista* p2 = l2;


    for(p1=l1;p1!=NULL;p1=p1->prox )
    {
    nl->info = p1->info;
    nl = p1->prox;

    while(p2!=NULL)
    {
    nl->info = p2->info;
    nl = p2->prox;
    }
    }
    return (nl);
    }

  2. #2
    cassiomarques
    Vc não tem um classe No ou Node ou algo do tipo? Porque ao invés de usar ponteiro para lista (pelo menos em todas as implementações que eu vi) neste caso é melhor vc usar um ponteiro para um nó. Na verdade alguns ponteiros auxiliares, para "segurar" a referência aos nós que vc está movimentando e não perder as partes das listas que ainda não foram intercaladas.

    A idéia é utilizar sempre ponteiros auxiliares. Você pode criar quantos quiser, primeiro crie um algorítmo que resolva o problema com qualquer quantidade de auxiliares. Pode chamá-los de aux1, aux2, etc... Depois que estiver funcionando vc pode tentar refinar a idéia para utilizar menos auxiliares. Com 4 dá pra fazer tranquilo.
    A lógica "geral" é:

    1) Descubra as melhores posições para seus auxiliares.
    2) Troque referências usando expressões como
    aux1->prox = aux3;
    aux2 = aux3->prox;

    etc...

    3) Pense que a ordem com que vc vai movimentar os ponteiros deve ser tal que, assim que vc intercalar um elemento de uma lista na outra, seus ponteiros fiquem relativamente na mesma posiçào que começaram. ssim vc consegue padronizar o método (garantir que as coisas acontecem sempre na mesma sequência) e colocar tudo em um laço, até que uma das listas (ou as duas) não tenha mais elementos a intercalar...

    Abraço!



  3. Lista* juntado (Lista* l1,Lista* l2){

    Lista* lc = (Lista*) malloc(sizeof(Lista));

    Lista* p1 = l1; //Variavel para percorre lista

    Lista* p2 = l2;

    for(p1=l1,p2=l2;p1!=NULL&&p2!=NULL;p1=p1->prox,p2=p2->prox)

    {

    lc->info = p1->info;

    lc->prox = p1->prox;

    lc->info = p2->info;

    lc->prox = p2->prox;

    }

    return (lc);

    }




    Desse jeito Funcionou Ok
    brigado pela Força






Tópicos Similares

  1. cadastro usando lista encadeada
    Por megabertis no fórum Linguagens de Programação
    Respostas: 0
    Último Post: 16-11-2010, 01:03
  2. Lista de DNS
    Por no fórum Servidores de Rede
    Respostas: 1
    Último Post: 20-12-2002, 11:18
  3. Lista de contatos publica no sendmail...
    Por AndrewAmorimdaSilva no fórum Servidores de Rede
    Respostas: 6
    Último Post: 12-11-2002, 09:46
  4. MAJORDOMO - listas
    Por thiagog no fórum Servidores de Rede
    Respostas: 0
    Último Post: 13-09-2002, 15:21
  5. lista de acessos
    Por marcio no fórum Servidores de Rede
    Respostas: 1
    Último Post: 01-08-2002, 00:31

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L