Utility functions for a linked list I have written code to add a node to the head of the list. Criticisms and feedback are welcome.

typedef struct sList
{
    void *data;
    struct sList *nextNode;
}sList;

sList *addNode2Head(sList *psList,void *data)
{
    if(psList == NULL)
        psList = newNode();
    else
    {
        psList = addHeadNode(psList);
        psList-&gt;data = data;
    }
    return psList;
}

sList *newNode(void)
{
    sList *psList =(sList *) malloc(sizeof(sList));
    //sList *psList = malloc(sizeof *sList); //Is it correct way ? if so why ?
    psList-&gt;nextNode = NULL;
    return psList;
}

sList *addHeadNode(sList *psList)
{
   sList *psListTemp = newNode();
   psListTemp-&gt;nextNode = psList;
   return psListTemp;
   //Another way ,
   //psList = psListTemp; //No return needed
}
The name addNode2Head will be better as addNodeToHead. Using the number 2 for the word to is rather poor choice in a function name.
The function addNodeToHead can be simplified to:

sList *addNodeToHead(sList *psList, void *data)
{
   sList* node = newNode();
   node-&gt;data = data;

   // It doesn't matter what psList is. The new
   // node is now the head of the list.
   node-&gt;nextNode = psList;

   return node;
}

Given the simplified implementation of addNodeToHead, the function addHeadNode might be unnecessary.
Don't explicitly cast the return value of malloc. See Do I cast the result of malloc?

Instead of

sList *psList =(sList *) malloc(sizeof(sList));


use

sList *psList = malloc(sizeof(sList));

Always check the return value of malloc before proceeding to use it.

sList *newNode(void)
{
    sList *psList = malloc(sizeof(sList));
    if ( psList == NULL )
    {
       return NULL;
    }
    psList-&gt;nextNode = NULL;
    return psList;
}

Make sure that you check the value returned by the above function.

   sList* node = newNode();
   if ( node == NULL )
   {
      // Decide how you want to handle the error.
      // return NULL???
   }

   node-&gt;data = data;