Вы звоните ListSame
с newList, который всегда будет иметь только последний созданный узел. Похоже, вы хотите передать root в ListSame.
Кроме того, в ListSame всегда проверяется head-> str, а не start-> str, который является вашей циклической переменной.
Также, если ListSame возвращает true (1), вы увеличиваете root-> count; Я не уверен, хотите ли вы увеличить счетчик корневого узла (подсчитать, сколько всего дубликатов) или счетчик для узла, который имеет дубликат (подсчитать, сколько раз каждое слово появляется). Если это последнее, то ListSame будет необходимо возвращать, какой узел является дубликатом, или ему придется увеличивать сам счет.
Кроме того, способ составления списка немного сбивает с толку. Когда вы говорите:
newList->next = root->next;
root->next = newList;
root-> next перед этим будет либо NULL, либо последним созданным узлом. Поэтому, когда вы делаете вставку здесь, вы всегда вставляете ее как второй элемент в списке. Это, вероятно, не то, что вы хотите. Если вы хотите добавить, вы должны следить за хвостом и головой; если вы хотите добавить в начало, просто установите newList->next = root; root = newList;