Ma il tuo prof si diverte con i puntatori ehh??

Comunque ho scritto il resto del programma che crea la lista ( scusate se la funzione riempi fa un po pena ma sono un po arrugginito con il c), comunque il risultato di tutto è la lista dei numeri DISPARI...

codice:
#include <stdlib.h>
#include <stdio.h>


struct Cella{
int valore;
struct Cella *next;
};

struct Coda{
struct Cella *primo;
struct Cella *ultimo;
};



void riempi(struct Coda * p) {
	int i;
	int vet[] = { 7,4,8,1,2};

	struct Cella * temp = NULL, *prec_temp = NULL, *primo = NULL;

	primo= malloc (sizeof(struct Cella)); 
	primo->next = temp;
	primo->valore = vet[0]; 
	temp = primo; 

	for (i = 1; i <= 4; i ++) {
		temp->next = malloc (sizeof(struct Cella));
		prec_temp = temp; 
		temp = temp->next; 
		temp->valore = vet[i];
		
	}

	temp->next  = NULL; 
	p->primo = primo; 
	p->ultimo = prec_temp->next; 
}; 


void stampa( const struct Coda * const p) {

	struct Cella * temp = p->primo; 
	// manca il controllo sull'sistenza dei puntatori
	printf ("Primo punta a : %d\n", p->primo->valore); 
	printf ("Ultimo punta a : %d\n", p->ultimo->valore); 


	while ( temp != NULL) { 
		
		printf("%d ---> ",temp-> valore); 
		temp = temp->next;
	}
	printf("NULL\n"); 

}



struct Cella *elabora(struct Coda *C, struct Cella *aux)
{

struct Cella *temp;

if (C->primo == aux)		     //Se puntano allo stesso elemento ritorna NULL, condizione di uscita
return NULL;			
			
temp = C->primo;		        // temp si salva il contenuto di primo
C->primo = C->primo->next;	// alla lista primo, si toglie il primo elemento 

if (temp->valore % 2 == 1)	    // Se l'elemento salvato in temp è dispari si chiama la funzione elabora per trovare il   
{				// prossimo elemento da attaccare, si inizia a creare la lista dei numeri dispari 
temp->next = elabora(C,aux);	
return temp;
}

temp->next = C->ultimo;		// a temp accodo l'ultimo elemento 
C->ultimo = temp;		// aggiorno ultimo con l'elemento contenuto in temp 
return elabora(C,aux);		// esclude i termini pari, accodandoli all'ultimi posti finchè il primo
				// puntare non coincide con aux
}



int main () {

	struct Coda C;
	struct Cella *L = NULL;

	riempi(&C); 

 	stampa(&C); 


	L = elabora(&C,C.ultimo);
	

	printf("Il risultato della funzione elabora è :\n"); 	

	while ( L != NULL) { 
		
		printf("%d ---> ",L-> valore); 
		L = L->next;
	}
	printf("NULL\n");


	return 0; 

}