Program : Singly linked list - Insertion
// Insertion in singly linked list
(Insert First, Last and node at desire position)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct link
{
          int
no;
          struct
link *next;
};
struct link
*node,*start,*pre,*new1;
int i=0;
void create_link(struct link
*node);
void display(struct link *node);
void insert_first(struct link
*node);
void insert_last(struct link
*node);
void insert_desireposition(struct
link *node);
void main()
{
          int
ch;
          clrscr();
          do
          {
          //clrscr();
          printf("\n
Singly Linked List");
          printf("\n---------------------------");
          printf("\n
1. Create Link");
          printf("\n
2. Traverse Link");
          printf("\n
3. Insert First node");
          printf("\n
4. Insert Last node");
          printf("\n
5. Insert node at DesirePosition ");
          printf("\n
6. Exit");
          printf("\n-----------------------------");
                   printf("\n
Enter your choice:-");
                   scanf("%d",&ch);
                   switch(ch)
                   {
                    case 1:
                             node=(struct
link *)malloc(sizeof(struct link));
                             create_link(node);
                             break;
                    case 2:
                             printf("\n
Output\n");
                             display(node);
                             break;
                    case 3:
                             insert_first(node);
                             printf("\n
After Inserting First Node");
                             display(node);
                             break;
                    case 4:
                             insert_last(node);
                             printf("\n
After Inserting Last Node");
                             display(node);
                             break;
                    case 5:
                             insert_desireposition(node);
                             printf("\n
After Inserting At Desire Position");
                             display(node);
                             break;
                    case 6:
                             exit(0);
                             break;
                    default:
                                      printf("\n
Wrong Choice");
                   }
          }while(ch!=6);
          getch();
}
void create_link(struct link
*node)
{
          char
ans;
          start->next=NULL;
          node=start;
          fflush(stdin);
          printf("\n
Enter 'n' for break:-");
          ans=getchar();
          while(ans!='n')
          {
                   node->next=(struct
link *)malloc(sizeof(struct link));
                   node=node->next;
                   printf("\n
Enter data for node:-");
                   scanf("%d",&node->no);
                   node->next=NULL;
                   fflush(stdin);
                   printf("\n
Enter 'n' for break:-");
                   ans=getchar();
                   i++;
          }
}
void display(struct link *node)
{
          node=start->next;
          while(node)
          {
                   printf("\n  %d",node->no);
                   node=node->next;
          }
}
void insert_first(struct link
*node)
{
          node=start->next;
          pre=start;
          new1=(struct
link *)malloc(sizeof(struct link));
          printf("\n
Insert data for first node:-");
          scanf("%d",&new1->no);
          pre->next=new1;
          new1->next=node;
}
void insert_last(struct link
*node)
{
          node=start->next;
          pre=start;
          while(node)
          {
                   pre=pre->next;
                   node=node->next;
          }
          if(node==NULL)
          {
                   new1=(struct
link *)malloc(sizeof(struct link));
                   printf("\n
Insert data for last node:-");
                   scanf("%d",&new1->no);
                   pre->next=new1;
                   new1->next=node;
          }
}
void insert_desireposition(struct
link *node)
{
          int
node_no=1,insert_no,flag=0;
          node=start->next;
          pre=start;
          printf("\n
Enter position where you want to insert new node:-");
          scanf("%d",&insert_no);
          while(node)
          {
                   if(node_no==insert_no)
                   {
                             new1=(struct
link *)malloc(sizeof(struct link));
                             printf("\n
Insert data for new node:-");
                             scanf("%d",&new1->no);
                             pre->next=new1;
                             new1->next=node;
                             flag=1;
                             break;
                   }
                   else
                   {
                             pre=pre->next;
                             node=node->next;
                   }
                   node_no++;
          }
          if(flag==0)
          {
                   printf("\n
Position not found");
          }
}
Posted By :Ruchita Pandya
