Ciao a tutti ho un problema ... devo realizzare un algoritmo di fusione di 2 liste ( realizzate con vettori)

il risultato deve essere una terza lista "ordinata"... nel mio codice vengono solo fuse le 2 lista ma il risultato nella terza lista non è ordinato.

questo è il mio codice :


codice:
 ListaV ListaV::fusione(ListaV &l1, ListaV &l2){     
     ListaV l3;
     posizione p,q,r;
     tipoelem ele1, ele2;


     p=l1.primoLista();
     q=l2.primoLista();
     r=l3.primoLista();
     
     while ((!l1.fineLista(p)) && (!l2.fineLista(q))) {
           ele1=l1.leggiLista(p);
           ele2=l2.leggiLista(q);
           if (ele1<ele2){
                          l3.insLista(ele1,r);
                          p=l1.succLista(p);
                          
                          }else{
                                l3.insLista(ele2,r);
                                q=l2.succLista(q);
                                r=l3.succLista(r);
                              }//else era qui
           while(!l1.fineLista(p)){
                                   l3.insLista(l1.leggiLista(p),r);
                                   p=l1.succLista(p);
                                   r=l3.succLista(r);
                                   }//
           while(!l2.fineLista(q)){
                                   l3.insLista(l2.leggiLista(q),r);
                                   q=l2.succLista(q);
                                   r=l3.succLista(r);
                                   }//
                           
           }
     return l3;
     
     }
qualcuno mi spiega dove sbaglio , cioè il risultato non esce ordinato??
aspetto un vostro aiuto... grazie