Il testo dell'esercizio è:
Scrivere la funzione C che realizza l'algoritmo di fusione su una lista collegata con puntatori. La funzione
riceve in ingresso due doppi puntatori ptrptr1 e ptrptr2,dove ptrptr1 punta alla prima metà della
lista e ptrptr2 alla seconda metà della lista. Le due semi-liste puntate da ptrptr1 e ptrptr2 sono
ordinate. La lista risultato ordinata deve essere puntata da ptrptr1 e deve essere generata spostando gli
elementi delle due semi-liste senza utilizzare nuove allocazioni/deallocazioni della memoria (NOTA: la lista
puntata da ptrptr2 è una sottolista di quella puntata da ptrptr1).
Potreste gentilmente verificare la correttezza di questo programma ed eventualmente indicarmi dove ho sbagliato..Grazie!
#include <stdio.h>
#include <stdlib.h>
struct list {
float value;
struct list *next_ptr;
};
int LunghezzaLista( struct list *ptr);
void main(void)
{
int value;
struct list *ptr;
void merge(struct list *ptrptr1, struct list *ptrptr2)
{
int length;
length=LunghezzaLista(ptr);
while (ptr!=(ptr+length/2)->next_ptr)
{
ptrptr1->value=ptr->value;
ptr=ptr->next_ptr;
}
while (ptr!=NULL)
{
ptrptr2->value=ptr->next_ptr->value;
ptr=ptr->next_ptr;
}
while(ptrptr1!=ptrptr1+length/2 && ptrptr2!=NULL)
{
if(ptrptr1->value < ptrptr2->value)
ptrptr1=(ptrptr1->next_ptr);
else
{
ptrptr1->next_ptr=ptrptr2;
ptrptr2=ptrptr2->next_ptr;
}
}
return;
}
return;
}
int LunghezzaLista( struct list *ptr)
{
int length=0;
while (ptr != NULL)
{
length++;
ptr->next_ptr;
}
printf("la lista contiene:",length);
return length;
}