Hey guys i have something wrong with my prototype the ListNodePtr ListReverse() prototype how am i suppose to declare that prototype if it returns a pointer node?


Code:
#include <stdlib.h>
#include <stdio.h>

int ListInsert();
ListNodePtr ListReverse();
void ListFree();
void ListTraverse();
void printSquared();

#define LISTSIZE 6
#define TRUE 1
#define FALSE 0

typedef struct ListNode * ListNodePtr;

typedef struct ListNode
{
  int data;
  ListNodePtr next;


}ListNode;

int main (void)
{
   int data;
   int i;
   ListNodePtr head = NULL;

  for(i=0; i<LISTSIZE; i++)
  {
    data = rand();
    
    if(!ListInsert(head, data))
    {
      printf("Insertion of node falied\n");
      ListFree(head);
      return EXIT_FAILURE;

    } 


  }

  head = ListReverse(head);
  ListTraverse(head, printSquared);
  ListFree(head);

  return 0;
}

int ListInsert(ListNodePtr * head, int data)
{

  ListNodePtr * newNode;

  newNode = malloc(sizeof(ListNode));

  if(!newNode)
  {
     printf("Cannnot allocate memory\n");
     return FALSE;
  }

   
  newNode->data = data;
  newNode->next = *head;
  *head = newNode;


 
  return 0;
}

ListNodePtr ListReverse(ListNodePtr head)
{

  ListNodePtr  next, current, previous;
  current = NULL;
  previous = NULL;
  next = NULL;



  while(current !=NULL)
  {
    next = current -> next;
    current-> next = previous;
    previous = current;
    current = next;
  }

   return previous;
}

void ListFree(ListNodePtr head)
{
  ListNodePtr current, next;

  current = head;
  next = NULL;

  while(current != NULL)
  {
    next = current->next;
    free(current);
    current = next;
  }

}

void printSquared(int data)
{

  printf("%d\n",(data * data));

}

void ListTraverse(ListNodePtr head, void (*process)(int))
{

  ListNodePtr current;
  
  current = head;

  while(current)
  {
     process(current->data);
     current = current->next;
  }

}