Menu driven program for all operations on singly linked list in C

03 Jul, 2022
A Linked List is a linear data structure that consists of two parts: one is the data part and the other is the address part. In this article, all the common operations of a singly linked list is discussed in one menu-driven program.
Operations to be performed:
createList(): To create the list with ‘n’ number of nodes initially as defined by the user.
traverse(): To see the contents of the linked list, it is necessary to traverse the given linked list. The given traverse() function traverses and prints the content of the linked list.
insertAtFront(): This function simply inserts an element at the front/beginning of the linked list.
insertAtEnd(): This function inserts an element at the end of the linked list.
insertAtPosition(): This function inserts an element at a specified position in the linked list.
deleteFirst(): This function simply deletes an element from the front/beginning of the linked list.
deleteEnd(): This function simply deletes an element from the end of the linked list.
deletePosition(): This function deletes an element from a specified position in the linked list.
maximum(): This function finds the maximum element in a linked list.
mean(): This function finds the mean of the elements in a linked list.
sort(): This function sort the given linked list in ascending order.
reverseLL(): This function reverses the given linked list.
Below is the implementation of the above operations:
C
// C program for the all operations in// the Singly Linked List#include <stdio.h>#include <stdlib.h>// Linked List Nodestruct node {    int info;    struct node* link;};struct node* start = NULL;  // Function to create list with n nodes initially void createList(){    if (start == NULL) {        int n;        printf("\nEnter the number of nodes: ");        scanf("%d", &n);        if (n != 0) {            int data;            struct node* newnode;            struct node* temp;            newnode = malloc(sizeof(struct node));            start = newnode;            temp = start;            printf("\nEnter number to"                   " be inserted : ");            scanf("%d", &data);            start->info = data;              for (int i = 2; i <= n; i++) {                newnode = malloc(sizeof(struct node));                temp->link = newnode;                printf("\nEnter number to"                       " be inserted : ");                scanf("%d", &data);                newnode->info = data;                temp = temp->link;            }        }        printf("\nThe list is created\n");    }    else        printf("\nThe list is already created\n");}  // Function to traverse the linked listvoid traverse(){    struct node* temp;      // List is empty    if (start == NULL)        printf("\nList is empty\n");      // Else print the LL    else {        temp = start;        while (temp != NULL) {            printf("Data = %d\n", temp->info);            temp = temp->link;        }    }}  // Function to insert at the front// of the linked listvoid insertAtFront(){    int data;    struct node* temp;    temp = malloc(sizeof(struct node));    printf("\nEnter number to"           " be inserted : ");    scanf("%d", &data);    temp->info = data;      // Pointer of temp will be    // assigned to start    temp->link = start;    start = temp;}  // Function to insert at the end of// the linked listvoid insertAtEnd(){    int data;    struct node *temp, *head;    temp = malloc(sizeof(struct node));      // Enter the number    printf("\nEnter number to"           " be inserted : ");    scanf("%d", &data);      // Changes links    temp->link = 0;    temp->info = data;    head = start;    while (head->link != NULL) {        head = head->link;    }    head->link = temp;}  // Function to insert at any specified// position in the linked listvoid insertAtPosition(){    struct node *temp, *newnode;    int pos, data, i = 1;    newnode = malloc(sizeof(struct node));      // Enter the position and data    printf("\nEnter position and data :");    scanf("%d %d", &pos, &data);      // Change Links    temp = start;    newnode->info = data;    newnode->link = 0;    while (i < pos - 1) {        temp = temp->link;        i++;    }    newnode->link = temp->link;    temp->link = newnode;}  // Function to delete from the front// of the linked listvoid deleteFirst(){    struct node* temp;    if (start == NULL)        printf("\nList is empty\n");    else {        temp = start;        start = start->link;        free(temp);    }}  // Function to delete from the end// of the linked listvoid deleteEnd(){    struct node *temp, *prevnode;    if (start == NULL)        printf("\nList is Empty\n");    else {        temp = start;        while (temp->link != 0) {            prevnode = temp;            temp = temp->link;        }        free(temp);        prevnode->link = 0;    }}  // Function to delete from any specified// position from the linked listvoid deletePosition(){    struct node *temp, *position;    int i = 1, pos;      // If LL is empty    if (start == NULL)        printf("\nList is empty\n");      // Otherwise    else {        printf("\nEnter index : ");          // Position to be deleted        scanf("%d", &pos);        position = malloc(sizeof(struct node));        temp = start;          // Traverse till position        while (i < pos - 1) {            temp = temp->link;            i++;        }          // Change Links        position = temp->link;        temp->link = position->link;          // Free memory        free(position);    }}  // Function to find the maximum element// in the linked listvoid maximum(){    int a[10];    int i;    struct node* temp;      // If LL is empty    if (start == NULL)        printf("\nList is empty\n");      // Otherwise    else {        temp = start;        int max = temp->info;          // Traverse LL and update the        // maximum element        while (temp != NULL) {              // Update the maximum            // element            if (max < temp->info)                max = temp->info;            temp = temp->link;        }        printf("\nMaximum number "               "is : %d ",               max);    }}  // Function to find the mean of the// elements in the linked listvoid mean(){    int a[10];    int i;    struct node* temp;      // If LL is empty    if (start == NULL)        printf("\nList is empty\n");      // Otherwise    else {        temp = start;          // Stores the sum and count of        // element in the LL        int sum = 0, count = 0;        float m;          // Traverse the LL        while (temp != NULL) {              // Update the sum            sum = sum + temp->info;            temp = temp->link;            count++;        }          // Find the mean        m = sum / count;          // Print the mean value        printf("\nMean is %f ", m);    }}  // Function to sort the linked list// in ascending ordervoid sort(){    struct node* current = start;    struct node* index = NULL;    int temp;      // If LL is empty    if (start == NULL) {        return;    }      // Else    else {          // Traverse the LL        while (current != NULL) {            index = current->link;              // Traverse the LL nestedly            // and find the minimum            // element            while (index != NULL) {                  // Swap with it the value                // at current                if (current->info > index->info) {                    temp = current->info;                    current->info = index->info;                    index->info = temp;                }                index = index->link;            }              // Update the current            current = current->link;        }    }}  // Function to reverse the linked listvoid reverseLL(){    struct node *t1, *t2, *temp;    t1 = t2 = NULL;      // If LL is empty    if (start == NULL)        printf("List is empty\n");      // Else    else {          // Traverse the LL        while (start != NULL) {              // reversing of points            t2 = start->link;            start->link = t1;            t1 = start;            start = t2;        }        start = t1;          // New head Node        temp = start;          printf("Reversed linked "               "list is : ");          // Print the LL        while (temp != NULL) {            printf("%d ", temp->info);            temp = temp->link;        }    }}  // Driver Codeint main(){    int choice;    while (1) {          printf("\n\t1  To see list\n");        printf("\t2  For insertion at"               " starting\n");        printf("\t3  For insertion at"               " end\n");        printf("\t4  For insertion at "               "any position\n");        printf("\t5  For deletion of "               "first element\n");        printf("\t6  For deletion of "               "last element\n");        printf("\t7  For deletion of "               "element at any position\n");        printf("\t8  To find maximum among"               " the elements\n");        printf("\t9  To find mean of "               "the elements\n");        printf("\t10 To sort element\n");        printf("\t11 To reverse the "               "linked list\n");        printf("\t12 To exit\n");        printf("\nEnter Choice :\n");        scanf("%d", &choice);          switch (choice) {        case 1:            traverse();            break;        case 2:            insertAtFront();            break;        case 3:            insertAtEnd();            break;        case 4:            insertAtPosition();            break;        case 5:            deleteFirst();            break;        case 6:            deleteEnd();            break;        case 7:            deletePosition();            break;        case 8:            maximum();            break;        case 9:            mean();            break;        case 10:            sort();            break;        case 11:            reverseLL();            break;        case 12:            exit(1);            break;        default:            printf("Incorrect Choice\n");        }    }    return 0;}
  
Output:
Menu:  
Insertion at the starting:  
Insertion at the end:  
Insertion at specific position:  
Print the Linked List:  
Maximum among Linked List:  
Sorting the Linked List:  
 
Reverse the Linked List:  
Delete the first and last element with choice 5 and 6:  
 
 
jayghughri1
akhilhakkim
Delete a Linked List
Linked Lists
Linked-List-Sorting
Menu driven programs
Technical Scripter 2020
Data Structures
Linked List
Technical Scripter
Data Structures
Linked List
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.