- Lista encadeada
+ Responder ao Tópico
-
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);
}
-
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!
-
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