Гуглим односвязный список.
Кстати, зачем списку связность? Для поиска? Тогда лучше двусвязный, вперед и назад, правда заполнение становится сложнее.
И память брать не только для структуры, но и для поля данных. И чистить сразу, чтобы не вляпаться.
#define MAXLEN 1024 // Задаемся максимальной длиной строки
struct Node *head;
if ((head = calloc(sizeof(struct Node) + MAXLEN,1)) == NULL)
puts("Cannot alloc memory");
head->str = head + sizeof(struct Node); // тут данные
strncpy(head->str¸ name, strlen(name));
Почему нельзя просто переадресовать name? Если оно из кучи, оно запросто будет переписано, лучше хранить отдельно. Тупо но надежно.
UPD: Немного поправил код - переставил неверно поставленную скобку в calloc()