se non ricordo male la free si puo' richiamare solo su dati allocati dinamicamente , quindi penso che a priori non sia possibile neanche fare una free(head) che solitamente è un tipo di dato (puntatore) statico . Cmq per risondere alla tua domanda penso che per ogni elemento dorai effetuare una free, visto anche il fatto che per ogni elemento hai dovuto chiamare una malloc.