ok, ora funziona, graszie di tutto.

Un ultima cosa....per cancellare ricorsivamente tutti gli elementi da una lista e metterli in un altra lista (l' ordine non importa), jo provato ad utilizzare questo codice

codice:
k=testacoda;  	

if(scancoda->succ)
	{
		scancoda=testacoda->succ;
		testacoda=scancoda;
	
		if (testacancella==NULL) {
	    
			ncancella=malloc (sizeof (struct FREELIST));
			ncancella->x=k->x;
			ncancella->y=k->y;
			ncancella->succ=NULL;
			testacancella=ncancella;
			codacancella=ncancella; }


		else {

            ncancella=malloc (sizeof (struct FREELIST));
    	    ncancella->x=k->x;
   	    ncancella->y=k->y;
            ncancella->succ=NULL;
	    codacancella->succ=ncancella;
	    codacancella=ncancella;
	       
		}
	free(k);
	}
	    
	else  {
	  
		testacoda=NULL; 
}
solo che in questo modo l' ultimo elemento non me lo leva dalla coda.

Ho provato questo, modificando la prima parte:

codice:
k=testacoda;  	

if(testacoda)
	{
	if (testacoda->succ) {
	scancoda=testacoda->succ;
	testacoda=scancoda;
	}
....

ma mi da errore, probabilmente perchè vado a leggere da puntatori che non esistono