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).
Program to create a linked lis
#include
#include
#define NULL 0
struct
linked_list
{
intnumber;
structlinked_list *next;
};
typedef
struct
linked_list node;
main()
{
node *head;
voidcreate(node *p);
intcount(node *p);
void
print(node *p);
head = (node *)malloc
(
sizeof
(node));
create(head);printf
(
"\n"
);
printf
(head);
printf
(
"\n"
);
printf
(
"\n Number of items = %d \n"
, count(head));
}
void
create(node *list)
{
printf
(
"Input a number\n"
);
printf
(
"(type -999 at end): "
);
scanf(
"%d"
, &list -> number);
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);
if
(list->next->next == NULL)
printf
(
"%d"
, list->next->number);
printf(list->next);
}
return;
}
intcount(node *list)
{
if(list->next == NULL)
return(0);
elsereturn
(1+ count(list->next));
}