Write c program to perform following functions on Singly Linked List 1) Create Singly Linked List 2) Display 3) Insert node at in between 4) Insert node at first 5) Insert last 6) Count number of nodes in Singly Linked List 7) Search the element from list 8) Delete first node 9) Delete last node 10) Delete from in between 11)Reverse the linked list

Singly Linked List 

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

//To create structure sll
struct sll
{
int data;
   struct sll *next;
};
typedef struct sll node;

//To define functions
node * createsll(node *);
void displaysll(node*);
node * insatspec(node * head, int p);
void search (node * head, int s);
int count(node *);
node *delatspec(node *,int);
node *reverse(node *);

void main()
{
node *head=NULL;
   int ch,p,c,s;
   do
   {  printf("\n*************** MENU *********************");
    printf("\n\n1.Create sll \n2.Display sll \n3.Insert node at in between.\n4.Insert first \n5.Insert last \n6.Count number of nodes. \n7.Search the element. \n8.Delete first \n9.Delete last \n10.Delete from in between.\n11.Reverse the linked list. \nother than above to EXIT");
      printf("\nEnter your choice:");
      scanf("%d",&ch);

      switch (ch)
      {
      case 1:
         head= createsll(head);
         break;
         case 2:
         displaysll(head);
         break;
         case 3:
         printf("\nEnter the position.");
         scanf("%d",&p);
         head=insatspec(head,p);
         break;
         case 4:
         head=insatspec(head,1);
         displaysll(head);
         break;
         case 5:
         head=insatspec(head,(count(head)+1));
         displaysll(head);
         break;
         case 6:
         c=count(head);
         printf("\nNumber of nodes is: %d",c);
         break;
         case 7:
         printf("\nEnter the element: ");
         scanf("%d",&s);
         search(head,s);
         break;
         case 8:
         head=delatspec(head,1);
         displaysll(head);
         break;
         case 9:
         head=delatspec(head,count(head));
         displaysll(head);
         break;
         case 10:
         printf("\nEnter the position: ");
         scanf("%d",&p);
         head=delatspec(head,p);
         displaysll(head);
         break;
         case 11:
         head=reverse(head);
         displaysll(head);
         break;
      }
   }while(ch<=11&&ch>=1);
}

//To create Linked List
node * createsll(node *head)
{
node *temp=NULL, *last=NULL;
   int n,i;
   printf("\nEnter how many nodes: ");
   scanf("%d",&n);
   for(i=1;i<=n;i++)
   {
    temp=(node *) malloc (sizeof(node));
    if(temp==NULL)
    {
    printf("\nMemory allocation error.");
    }
    else
    {
    temp->next=NULL;
      printf("\nEnter data:");
      scanf("%d",&temp->data);
    }
      if(head==NULL)
{
      head=temp;
      }
      else
      {
      last=head;
         while(last->next!=NULL)
         {
          last=last->next;
         }
         last->next=temp;
      }
   }
   return head;
}

//To display elements in Linked List
void displaysll(node *head)
{
node *last=NULL;
if(head==NULL)
   {
    printf("\nSLL empty");
   }
   else
   {
    printf("\nContent of sll:");
      last=head;
      while(last!=NULL)
      {
      printf("%d ",last->data);
         last=last->next;
      }
   }
}

//To count the number of nodes in Singly Linked List
int count(node *head)
{
int c=0;
   node *ptr=NULL;
   ptr=head;
   while(ptr!=NULL)
   {
    c++;
      ptr=ptr->next;
   }
   return c;
}

//To insert a node at a specific position
node * insatspec(node * head, int p)
{
node *temp=NULL, *ptr=NULL,*pt=NULL;
   int c=0;
   temp=(node *)malloc (sizeof(node));
   temp->next=NULL;
   printf("\nEnter data:");
   scanf("%d",&temp->data);
   ptr=head;
   while(ptr!=NULL)
   {
    c++;
      ptr=ptr->next;
   }
   if(p==0||p==c+2)
   {
    printf("\nImpossible to Insert at %d position",p);
      getch();
      return head;
   }
   else
   {
    if(p==1)
      {
      ptr=head;
         temp->next=ptr;
         head=temp;
      }
      else if(p==c+1)
      {
      ptr=head;
         while(ptr->next!=NULL)
         {
          ptr=ptr->next;
         }
         ptr->next=temp;
      }
      else
      {
      ptr=head;
         c=1;
         while(c!=p-1)
         {
          ptr=ptr->next;
            c++;
         }
         pt=ptr->next;
         ptr->next=temp;
         temp->next=pt;
      }
   }
   return head;
}

//To search the element from a list
void search (node * head, int s)
{
node *ptr;
   int c=1;
   ptr=head;
   while(ptr!=NULL)
   {
    if(ptr->data==s)
      {
      printf("\n%d is found at %d position.",s,c);
         getch();
         return;
      }
      ptr=ptr->next;
      c++;
   }
   printf("\n%d is not present in list.",s);
}

//To delete a node from a specific position
node *delatspec(node * head, int p)
{
   int c;
   node *ptr=NULL, *pt=NULL, *temp=NULL;
   c=count(head);
   if(p==0||p>c)
   {
    printf("\nImpossible to delete from %d position",p);
      getch();
      return head;
   }
   else
   {
    if(p==1)
      {
      temp=head;
         head=temp->next;
         temp->next=NULL;
      }
      else if(p==c)
      {
      ptr=head;
         while(ptr->next->next!=NULL)
         ptr=ptr->next;
         temp=ptr->next;
         ptr->next=NULL;
      }
      else
      {
      ptr=head;
         c=1;
         while(c!=p-1)
         {
          c++;
            ptr=ptr->next;
         }
         temp=ptr->next;
         pt=ptr->next->next;
         temp->next=NULL;
         ptr->next=pt;
      }
      free(temp);
      return head;
   }
}

// To reverse a Linked List
node *reverse(node* head)
{
   node *p1=NULL,*p2=NULL,*p3=NULL;
   p1=head;
   p2=p1->next;
   p3=p2->next;
   p1->next=NULL;
   p2->next=p1;
   while(p3!=NULL)
   {
    p1=p2;
      p2=p3;
      p3=p2->next;
      p2->next=p1;
   }
   head=p2;
   return head;
}

0 Comments