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;
}
}