Proponuję następującą wersję usuwania listy jednokierunkowej dla Twojej funkcji:
void deleteList(list *list) {
elements *tmp;
while(list->head != NULL) {
temp = list->head;
list->head = tmp->next; // ewentualnie list->head = list->head->next;
free(temp);
}
}