Ho un piccolo problema con la fusione di due liste passate come parametro ad una funzione che restituisce la lista risultato. Ho scritto già interamente tutto il codice, e credo che la logica sia pienamente quella giusta, infatti nella maggior parte dei casi funziona, con determinate stringhe però, l'algoritmo non funziona più come dovrebbe, e il programma va in loop. Dove sta l'errore ?

codice:
nodo *fusion_liste(nodo *head, nodo *head2){
  nodo *new_nodo;
  if((head!=NULL)||(head2!=NULL)){
    if(head==NULL){
      new_nodo=dup_lista(head2);                 
    }
    else if(head2==NULL){
      new_nodo=dup_lista(head);                    
    }
    else if(strcmp(head->stringa,head2->stringa)<0){
      new_nodo=create_nodo(head->stringa);                    
      new_nodo->next=fusion_liste(head->next,head2);
    }
    else{
      new_nodo=create_nodo(head2->stringa);
      new_nodo->next=fusion_liste(head,head2->next);
    }
  }
  return new_nodo;
}



nodo *dup_lista(nodo *n){
       nodo *dup=NULL;
       if(n!=NULL){
               dup=create_nodo(n->stringa);
               if(n->next!=NULL)
                      dup->next=dup_lista(n->next);
       }
       return dup;
}