Devi utilizzare una struttura simile alla seguente :

codice:
struct cir_list
{
 struct cir_list *next /* punta al prossimo elemento */
 .....                 /* altri campi */
};
Il tuo puntatore principale che chiameremo tail punterà alla coda della lista .
codice:
struct cir_list *tail;
La funzione newcell opererà nel seguente modo:
Se tail punta a NULL ,caso di prima inserzione ,allora fa puntare tail alla cella corrente.La testa e la coda coincidono.
Se tail non punta a NULL ,che significa che c'è una cella testa , allora effettua le seguente operazioni:
1) Salva in un puntatore temporaneo il campo next di tail (salva la testa della lista).
2) Modifica il campo next della coda in modo che punti all'ultima cella inserita.
3) Imposta il campo next della cella inserita uguale al puntatore temporaneo (punta alla testa della lista) .
4) Modifica tail in modo che punti all'ultima cella inserita .
Spero che questo ti chiarisca un po le idee . Buon lavoro