C program to create a linear linked list

Written by siddhartha. Posted in Data Structures

Write a program to create a linear linked list interactively and print out the list and the total number of items in the list

The program shown below first allocates a block of memory dynamically for the first node using the statement

head = (node *)malloc(sizeof(node));

which returns a pointer to a structure of type node that has been type defined earlier. The linked list is then created by the function create. The function requests for the number to be placed in the current node that has been created. If the value assigned to the current node is –999, then null is assigned to the pointer variable next and the list ends. Otherwise, memory space is allocated to the next node using again the malloc function and the next value is placed into it. Not that the function create calls itself recursively and the process will continue until we enter the number –999.

The items stored in the linked list are printed using the function print which accept a pointer to the current node as an argument. It is a recursive function and stops when it receives a NULL pointer. Printing algorithm is as follows;

1. Start with the first node.
2. While there are valid nodes left to print
a) print the current item and
b) advance to next node

Similarly, the function count counts the number of items in the list recursively and return the total number of items to the main function. Note that the counting does not include the item –999 (contained in the dummy node).

Source Code

/*************************************************************************************/
/*  C program to create a linear linked list.*/
/*  Download more programs at http://sourcecode4u.com/ */
/*************************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define NULL 0

struct linked_list
{
	int number;
	struct linked_list *next;
};
typedef struct linked_list node;  /* node type defined */

main()
{
	node *head;
	void create(node *p);
	int count(node *p);
	void print(node *p);
	head = (node *)malloc(sizeof(node));
	create(head);
	printf("\n");
	printf(head);
	printf("\n");
	printf("\nNumber of items = %d \n", count(head));
}
void create(node *list)
{
	printf("Input a number\n");
	printf("(type -999 at end): ");
	scanf("%d", &list -> number); /* create current node */

	if(list->number == -999)
	{
		list->next = NULL;
	}
	else 	/*create next node */
	{
		list->next = (node *)malloc(sizeof(node));
		create(list->next);
	}
	return;
}
void print(node *list)
{
		if(list->next != NULL)
		{
		  printf("%d-->",list ->number);  /* print current item */
		  
		   if(list->next->next == NULL)
			printf("%d", list->next->number);

		  printf(list->next);		/* move to next item */
		}
		return;
	}

	int count(node *list)
	{
		if(list->next == NULL)
		       return (0);
		else
		       return(1+ count(list->next));
	}

Out Put

BLOG COMMENTS POWERED BY DISQUS