I'm just learning Linked Lists in C and made a quick program that I'm having problems getting to work. Here's the code:
Code:
#include <stdio.h>
#define NAME_LENGTH 100
#define NODES_AT_ONCE 1000
struct node
{
char name[NAME_LENGTH];
struct node *next;
};
typedef struct node Node;
Node *freeList = NULL;
void freeNode( Node *p )
{
p -> next = freeList;
freeList = p;
}
Node* newNode( char *s, Node *next )
{
Node *r = freeList;
int i;
// if no space left in list, get space for Nodes
if( freeList == NULL )
{
freeList = ( Node* )calloc( NODES_AT_ONCE, sizeof( Node ) );
for( i = NODES_AT_ONCE - 1; i >= 0; i-- )
{
freeList[i].next = r;
r = &freeList[i];
}
}
freeList = r -> next;
strncpy( r -> name, s, NAME_LENGTH );
r -> next = next;
}
void output( Node *head )
{
Node *p;
for( p = head; p != NULL; p = p -> next )
printf( "%s", p -> name );
printf( "\n" );
}
Node* reverseList( Node *head )
{
Node *p, *rev = NULL;
for( p = head; p != NULL; p = p -> next )
rev = newNode( p -> name, rev );
return rev;
}
int main()
{
Node *ghead, *bhead, *p, *temp, *rev;
ghead = newNode( "Amy", NULL );
output( ghead );
bhead = newNode( "Kirk", NULL );
output ( bhead );
ghead -> next = newNode("Tiff", ghead -> next );
output( ghead );
bhead -> next = newNode("Merl", bhead -> next );
output ( bhead );
rev = reverseList( bhead );
output( rev );
return 0;
}
I planned on allowing users to pass files or to manually type in the names, but until I get it working, I hardcoded my inputs.
Currently, it prints the following output:
Amy
Kirk
Segmentation Fault
I'm pretty sure the error comes in this piece of code and have tried altering it a few times, but can't get it to work. Any suggestions?
Code:
ghead -> next = newNode("Tiff", ghead -> next );
output( ghead );
bhead -> next = newNode("Merl", bhead -> next );
output ( bhead );