Ti do 1 implementazione veloce e semplice ke puoi cmq ottimizzare.
Le liste sono ordinate in ordine decrescente e nn ci sono doppioni.

ciao
--------------------------------
strucn Node {
struct Node* previous;
struct Node* next;
int item;
}

struct List {
struct Node* first;
struct Node* last;
int number;
}

struct List* merge (struct List* L1ptr, struct List* L2ptr)
{
struct Node* NofL1ptr = L1ptr->first;
struct Node* NofL2ptr = L2ptr->first;
struct Node* temp;
if (NofL1ptr == NULL) {
free (L1ptr);
return L2ptr;
}
if (NofL2ptr == NULL) {
free (L2ptr);
return L1ptr;
}
for ( ;NofL1ptr != NULL; NofL1ptr = NofL1ptr->next)
//INIZIO FOR
while (NofL2ptr != NULL) {
//INIZIO WHILE
temp =NofL2ptr->next;
if ((Nofl2ptr->item) > (NofL1ptr->item)) {
NofL2ptr->previous = NofL1ptr->previous;
NofL2ptr->next = NofL1ptr;
NofL1ptr->previous =NofL2ptr;
NofL2ptr =temp;
if (NofL1ptr == L1ptr->first) L1ptr->first = NofL2ptr;
L1ptr->number++;
L2ptr->number--;
} else if (Nofl2ptr->item == NofL1ptr->item) {
free (NofL2ptr);
NofL2ptr=temp;
L2ptr->number--;
break;
} else {
NofL2ptr = temp;
break;
}
}
//FINE WHILE
//FINE FOR
if (NofL2ptr != NULL) {
L1ptr->last->next =NofL2ptr;
NofL2ptr->previous = L1ptr->last;
L1ptr->number += L2ptr->number;
L1ptr->last =L2ptr->last;
}
free (l2ptr);
return L1ptr;
}
//THE END


[Messaggio modificato da Gohan!!!it'me!!! il 07-09-2001 alle 04:57 PM]