In order to create a singly linked list, you should not incrtement head after 'head = head-> next' in the for loop otheriwse the printlist returns NULL each time as the loop will not stop until and unless the 'head' is NULL. You may use the code-
LIST current = head;
while (current != NULL) {
printf("%s %d", current->str, current->count);
current = current->next;
}
You need to remember that the second malloc allocates memory but the return value for it is not assigned to anything so that the allocated memory gets lost. A *newList* is allocated but is not initialized. So using a *memcpy* for copying memory to *newList ->str fails since newList ->str points to nothing.