<1> в C вам нужно указать структурный узел для структур
struct node
{
...
} node;
последний 'узел' является переменной типа структурного узла, например,
node.val = 1;
, а не типом.
если вы хотите использовать 'узел' в качестве типа, вам нужно написать
typedef struct node { .. } node;
<2> если вы используете void *, вам понадобится механизм для обработки того, на что указывают указателинапример, если void * указывает на целое число, вам нужно сохранить целое число либо в стеке, либо в куче.
node n;
int value = 1;
n.val = &value; // pointing to a single integer on stack
int values[]={1,2,3};
n.val = values; // pointing to an array of integers on stack
void* ptr = malloc(sizeof(int));
n.val = ptr; // pointing to a single (uninit) integer allocated on heap
int* ptrval = (int*)ptr; // setting an int ptr to the same memory loc.
*ptrval = value; // ptrval now points to same as n.val does
<3> reverse (node * head) head - указатель на ваш список, * headявляется содержимым того, на что указывает указатель (первый узел ниже)
head -> [node next] -> [node next] -> [node next]
РЕДАКТИРОВАТЬ: перефразировано и отредактировано.EDITx2: очевидно, вопрос был отредактирован и добавлен typedef, поэтому вопрос был изменен.