A linked list is known as heterogeneous when every node of linked list can contain different type of information.
A void pointer can point to any type of data either in-built data type or user defined structure . storing such pointer in a void in not a problem. Problem comes at the time of accessing/ reading. since without knowing data structure type how it can be deferenced . so before accessing you should aware about the type. If your program has so many user defined different different data types then defined a
typedef enum { char, integer, float, double, struct type 1, struct type 2 ...etc } datatype;
typedef Struct heterogeneous_linkedlist
{
datatype type;
void * nodeInfo.
Struct heterogeneous_linkedlist *next;
} heterogeneous_node;