+ Responder ao Tópico



  1. #1

    Padrão Lista encadeada

    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
    Visitante

    Padrão

    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. #3

    Padrão

    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