C Tutorial/Data Structure/Linked list
Inserting a node by using recursive programs
# include <stdio.h>
   # include <stdlib.h>
   struct node
   {
      int data;
      struct node *link;
   };
   struct node *insert(struct node *p, int n)
   {
      struct node *temp;
      if(p==NULL)
      {
         p=(struct node *)malloc(sizeof(struct node));
         if(p==NULL)
         {
             printf("Error\n");
             exit(0);
         }
         p-> data = n;
         p-> link = NULL;
      } else{
         p->link = insert(p->link,n);
      }
      return (p);
   }
   void printlist ( struct node *p )
   {
         printf("The data values in the list are\n");
         while (p!= NULL)
         {
            printf("%d\t",p-> data);
            p = p-> link;
         }
   }
   void main()
   {
         int n =10;
         int x;
         struct node *start = NULL ;
         while ( n-- > 0 )
         {
            start = insert ( start, n );
         }
         printf("The created list is\n");
         printlist ( start );
   }The created list is The data values in the list are 9 8 7 6 5 4 3 2 1 0
Linked Lists
- Each element in a linked list can be placed anywhere in memory.
 - The elements are linked with each other using an explicit link field.
 - To access the element you can use the starting pointer of the list.
 
   
# include <stdio.h>
   # include <stdlib.h>
   struct node
   {
       int data;
       struct node *link;
   };
   struct node *insert(struct node *p, int n){
      struct node *temp;
      if(p==NULL){
          p=(struct node *)malloc(sizeof(struct node));
         if(p==NULL) {
             printf("Error\n");
             exit(0);
         }
         p-> data = n;
         p-> link = p;
      } else {
         temp = p;
         while (temp-> link != p)
            temp = temp-> link;
            temp-> link = (struct node *)malloc(sizeof(struct node));
            if(temp -> link == NULL){
               printf("Error\n");
               exit(0);
            }
            temp = temp-> link;
            temp-> data = n;
            temp-> link = p;
          }
          return (p);
   }
   void printlist ( struct node *p )
   {
      struct node *temp;
      temp = p;
      printf("The data values in the list are\n");
      if(p!= NULL)
      {
            do
            {
                printf("%d\t",temp->data);
                temp=temp->link;
            } while (temp!= p);
      }
      else
         printf("The list is empty\n");
   }
   void main()
   {
      int n;
      int x;
      struct node *start = NULL ;
      start = insert ( start, 1 );
      start = insert ( start, 2);
      start = insert ( start, 3 );
      start = insert ( start, 4 );                          
      printf("The created list is\n");
      printlist ( start );
   }The created list is The data values in the list are 1 2 3 4