"Собственно я не понимаю в чем динамизм списков, если при создании узла мне надо дать имя узлу"
И что за имя?
Суть в следующем.
Для массива - тебе нужно заранее знать, сколько выделить памяти.
Для списка же - ты можешь добавлять элементы на ходу (например - в цикле неизвестной заранее длительности).
Условно:
struct List {
void* value;
List* next;
}
List* newList(void* value) {
List* result = malloc(sizeof(List), 1);
result->value = value;
result->next = NULL;
return result;
}
void main() {
char* rootValue = "ROOT";
List* root = newList((void*)rootValue);
List* list = root;
while(true) {
char* value = input();
if (streq(value, "BREAK")) {
break;
}
list->next = newList((void*) value);
list = list->next;
}
list = root;
while(list != NULL) {
printf("%s", (char*)list->value);
list = list->next;
}
}