void insert(const char data)
Это неправильно.
Вы вставляете один символ.Ну, в частности, вы вставляете указатель на этот единственный символ:
link -> data = &data;
... но (а) этот символ находится в стеке, поэтому указатель не будет оставаться действительным в течение очень долгого времени, и(б) это не та строка, о которой вы думаете.
Это:
insert(*temp);
Должно быть:
insert(temp);
... и вам следует изменитьПрототипы и реализация для соответствия.
Обратите внимание также, что вы могли бы захотеть взять копию строки (используйте strdup
, но помните об утечках памяти), а не указывать наоригинал.