typedef struct symbol_t{
char data;
struct symbol_t *next;
}sym_t;
sym_t *insert(sym_t *prev){
sym_t *new;
if ((new = (sym_t *)malloc(sizeof(sym_t))) == NULL)
puts("error");
new->next = prev;
prev = new;
return new;
}
int main(){
char c;
sym_t head, *new = NULL;
head.next = NULL;
while ((c = getchar()) != '\n'){
new = insert(head.next);
new->data = c;
}
for (new = &head; new->next != NULL; new = new->next)
printf("%c\n", new->next->data);
return 0;
}

リストの挿入をしたいのですが、上記のような関数を作った場合うまく動きません
どこがおかしいのか教えてください