Проблема в том, что функция
void push(struct Node *list_head, int unique_id, float grade);
имеет дело с копиями оригинальных указателей, определенных в main, потому что указатели передаются по значениям.
Вы должны объявить функцию как
void push(struct Node **list_head, int unique_id, float grade);
и вызовите его как
push( &list_head, 1, 4.0 );
Вот пример того, как можно определить функцию (я предполагаю, что функция добавляет узлы к своему хвосту).
int push(struct Node **list_head, int unique_id, float grade)
{
struct Node *node = malloc( sizeof( struct Node ) );
int success = node != NULL;
if ( success )
{
node->player.id_number = unique_id;
node->player.ratings = grade;
node->next = NULL;
while ( *list_head ) list_head = &( *list_head )->next;
*list_head = node;
}
return success;
}
Также этот цикл
traversalPtr = list_head;
while(traversalPtr -> next != NULL){
printf("%d\n",traversalPtr -> player.id_number);
traversalPtr = traversalPtr -> next;
}
неверен. Это должно выглядеть как
traversalPtr = list_head;
while(traversalPtr != NULL){
printf("%d\n",traversalPtr -> player.id_number);
traversalPtr = traversalPtr -> next;
}