Ho appena visto le liste e ho provato a fare un merge (che ovviamente non farà a caso tuo) ma in ogni caso prova a guardare se ti può servire...
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct cella * LIST;
struct cella{
int cont;
LIST next;
};
void inser_ordinato (int x, LIST * punLL);
void print (LIST LL);
void main(){
LIST L1=NULL, L2=NULL;
int val=0;
while(true){
printf("\nInserisci un valore nella 1a lista. 10000 per uscire\n");
scanf("%d", &val);
if (val==10000) break;
inser_ordinato(val, &L1);
}
while(true){
printf("\nInserisci un valore nella 2a lista. 10000 per uscire\n");
scanf("%d", &val);
if (val==10000) break;
inser_ordinato(val, &L2);
}
//faccio il merge delle liste passando alla funzione inserimento ordinato L1 com lista
//e L2->cont come valore
while(L2 != NULL){
inser_ordinato(L2->cont, &L1);
L2=L2->next;
}
print(L1);
}
void inser_ordinato (int x, LIST * punLL){
LIST prec=NULL, succ=NULL;
LIST aux;
aux = (LIST) calloc (1, sizeof (struct cella));
aux->cont = x;
if((* punLL == NULL) || x < (* punLL)->cont){
aux->next = * punLL;
* punLL = aux;
}
else{
prec = * punLL;
succ = (* punLL)->next;
while((succ != NULL) && (succ->cont < x)){
succ = succ->next;
prec = prec->next;
}
aux->next = succ;
prec->next = aux;
}
}
void print (LIST LL){
printf("\nLista:\n");
while (LL != NULL){
printf("%d ", LL->cont);
LL = LL->next;
}
printf ("\n");
}