Single Linked List

What is Linked List?

When we want to work with an unknown number of data values, we use a linked list data structure to organize that data. The linked list is a linear data structure that contains a sequence of elements such that each element links to its next element in the sequence. Each element in a linked list is called "Node".

What is Single Linked List?

Simply a list is a sequence of data, and the linked list is a sequence of data linked with each other.
The formal definition of a single linked list is as follows...

Single linked list is a sequence of elements in which every element has link to its next element in the sequence.

In any single linked list, the individual element is called as "Node". Every "Node" contains two fields, data field, and the next field. The data field is used to store actual value of the node and next field is used to store the address of next node in the sequence.
The graphical representation of a node in a single linked list is as follows...

single linked list

Example

example of single linked list

Operations on Single Linked List

The following operations are performed on a Single Linked List

Before we implement actual operations, first we need to set up an empty list. First, perform the following steps before implementing actual operations.

Insertion

In a single linked list, the insertion operation can be performed in three ways. They are as follows...

  1. Inserting At Beginning of the list
  2. Inserting At End of the list
  3. Inserting At Specific location in the list

Inserting At Beginning of the list

We can use the following steps to insert a new node at beginning of the single linked list...

Inserting At End of the list

We can use the following steps to insert a new node at end of the single linked list...

Inserting At Specific location in the list (After a Node)

We can use the following steps to insert a new node after a node in the single linked list...

Deletion

In a single linked list, the deletion operation can be performed in three ways. They are as follows...

  1. Deleting from Beginning of the list
  2. Deleting from End of the list
  3. Deleting a Specific Node

Deleting from Beginning of the list

We can use the following steps to delete a node from beginning of the single linked list...

Deleting from End of the list

We can use the following steps to delete a node from end of the single linked list...

Deleting a Specific Node from the list

We can use the following steps to delete a specific node from the single linked list...

Displaying a Single Linked List

We can use the following steps to display the elements of a single linked list...

Implementation of Single Linked List using C Programming

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

 

void insertAtBeginning(int);

void insertAtEnd(int);

void insertBetween(int,int,int);

void display();

void removeBeginning();

void removeEnd();

void removeSpecific(int);

 

struct Node

{

   int data;

   struct Node *next;

}*head = NULL;

 

void main()

{

   int choice,value,choice1,loc1,loc2;

   clrscr();

   while(1){

   mainMenu: printf("\n\n****** MENU ******\n1. Insert\n2. Display\n3. Delete\n4. Exit\nEnter your choice: ");

   scanf("%d",&choice);

   switch(choice)

   {

      case 1:           printf("Enter the value to be insert: ");

                            scanf("%d",&value);

                            while(1){

                            printf("Where you want to insert: \n1. At Beginning\n2. At End\n3. Between\nEnter your choice: ");

                            scanf("%d",&choice1);

                            switch(choice1)

                            {

                               case 1: insertAtBeginning(value);

                                                           break;

                               case 2: insertAtEnd(value);

                                                           break;

                               case 3:      printf("Enter the two values where you wanto insert: ");

                                                           scanf("%d%d",&loc1,&loc2);

                                                           insertBetween(value,loc1,loc2);

                                                           break;

                               default:               printf("\nWrong Input!! Try again!!!\n\n");

                                                           goto mainMenu;

                            }

                            goto subMenuEnd;

                            }

                            subMenuEnd:

                            break;

      case 2:           display();

                            break;

      case 3:           printf("How do you want to Delete: \n1. From Beginning\n2. From End\n3. Spesific\nEnter your choice: ");

                            scanf("%d",&choice1);

                            switch(choice1)

                            {

                               case 1: removeBeginning();

                                                           break;

                               case 2: removeEnd();

                                                           break;

                               case 3:      printf("Enter the value which you wanto delete: ");

                                                           scanf("%d",&loc2);

                                                           removeSpecific(loc2);

                                                           break;

                               default:               printf("\nWrong Input!! Try again!!!\n\n");

                                                           goto mainMenu;

                            }

                            break;

      case 4:           exit(0);

      default: printf("\nWrong input!!! Try again!!\n\n");

   }

   }

}

 

void insertAtBeginning(int value)

{

   struct Node *newNode;

   newNode = (struct Node*)malloc(sizeof(struct Node));

   newNode->data = value;

   if(head == NULL)

   {

      newNode->next = NULL;

      head = newNode;

   }

   else

   {

      newNode->next = head;

      head = newNode;

   }

   printf("\nOne node inserted!!!\n");

}

void insertAtEnd(int value)

{

   struct Node *newNode;

   newNode = (struct Node*)malloc(sizeof(struct Node));

   newNode->data = value;

   newNode->next = NULL;

   if(head == NULL)

             head = newNode;

   else

   {

      struct Node *temp = head;

      while(temp->next != NULL)

             temp = temp->next;

      temp->next = newNode;

   }

   printf("\nOne node inserted!!!\n");

}

void insertBetween(int value, int loc1, int loc2)

{

   struct Node *newNode;

   newNode = (struct Node*)malloc(sizeof(struct Node));

   newNode->data = value;

   if(head == NULL)

   {

      newNode->next = NULL;

      head = newNode;

   }

   else

   {

      struct Node *temp = head;

      while(temp->data != loc1 && temp->data != loc2)

             temp = temp->next;

      newNode->next = temp->next;

      temp->next = newNode;

   }

   printf("\nOne node inserted!!!\n");

}

 

void removeBeginning()

{

   if(head == NULL)

             printf("\n\nList is Empty!!!");

   else

   {

      struct Node *temp = head;

      if(head->next == NULL)

      {

              head = NULL;

              free(temp);

      }

      else

      {

             head = temp->next;

             free(temp);

             printf("\nOne node deleted!!!\n\n");

      }

   }

}

void removeEnd()

{

   if(head == NULL)

   {

      printf("\nList is Empty!!!\n");

   }

   else

   {

      struct Node *temp1 = head,*temp2;

      if(head->next == NULL)

             head = NULL;

      else

      {

              while(temp1->next != NULL)

              {

                 temp2 = temp1;

                 temp1 = temp1->next;

              }

              temp2->next = NULL;

      }

      free(temp1);

      printf("\nOne node deleted!!!\n\n");

   }

}

void removeSpecific(int delValue)

{

   struct Node *temp1 = head, *temp2;

   while(temp1->data != delValue)

   {

     if(temp1 -> next == NULL){

             printf("\nGiven node not found in the list!!!");

             goto functionEnd;

     }

     temp2 = temp1;

     temp1 = temp1 -> next;

   }

   temp2 -> next = temp1 -> next;

   free(temp1);

   printf("\nOne node deleted!!!\n\n");

   functionEnd:

}

void display()

{

   if(head == NULL)

   {

      printf("\nList is Empty\n");

   }

   else

   {

      struct Node *temp = head;

      printf("\n\nList elements are - \n");

      while(temp->next != NULL)

      {

              printf("%d --->",temp->data);

              temp = temp->next;

      }

      printf("%d --->NULL",temp->data);

   }

}

Output

implementation of single linked list