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"); }

Rispondi quotando