Consider a call to CreateAddSupremeNode...
So, since head is a Supreme *, &head is gonna be a Supreme **, and instead of changing the value of head in your function, you'll have to change the value of *head.
int main ()
Supreme * head = NULL; // The list is empty.
CreateAddSupremeNode (head); // This is bad...
// Now the list is not empty, so the value of head is not NULL.
// BUT that means changing the value of a passed variable,
// and the only way to do that is to pass a reference to the
// variable, which would be...
CreateAddSupremeNode (&head); // This is correct way to
// change value of head.