SOLUCIÓN AL EJERCICIO Nš 3 DE LISTAS,PILAS Y COLAS


Una implementación para esta función puede ser:

Lista Mezcla2(Lista l1,Lista l2)
{
  Lista L;
  Posicion p1,p2;
  int aux1,aux2;

  /*En la lista L guardaremos el resultado*/
  L=CrearLista(sizeof(int));

  /*Utilizamos p1 y p2 para recorrer las dos listas*/
  p1=PrimeroLista(l1);
  p2=PrimeroLista(l2);

  /*Obtenemos los elementos apuntados por p1 y p2 ,el menor*/
  /*de ellos se inserta en el resultado y se adelanta en una*/
  /*posicion.Se repite el proceso hasta que una lista queda */
  /*sin elementos (cuando p1 o p2 llegan al final) */

  while (p!=FinLista(l1)&& p2!=FinLista(l2)){
    Recuperar(&aux1,p1,l1);
    Recuperar(&aux2,p2,l2);
    if (aux1 < aux2){
       p1=Siguiente(p1,l1);
       Insertar(&aux1,FinLista(L),L);
    }
    else{
       p2=Siguiente(p2,l2);
       Insertar(&aux2,FinLista(L),L);
    }
  }

  /*Si p1 no ha llegado al final hay que vaciar l1 al final*/
  /*de la lista resultado*/
  While (p1!=FinLista(l1)){
    Recuperar(&aux1,p1,l1);
    p1=Siguiente(p1,l1);
    Insertar(&aux1,FinLista(L),L);
  }

  /*Si p2 no ha llegado al final hay que vaciar l2 al final*/
  /*de la lista resultado*/
  while (p2!=FinLista(l2)){
    Recuperar(&aux2,p2,l2);
    p2=Siguiente(p2,l2);
    Insertar(&aux2,FinLista(L),L);
  }

  /*Devolvemos L como resultado estando ya l1 y l2 vacias */
  return L;

}