#include #include /* Structure of a node */ struct node { int data; // Data struct node *next; // Address }*head; int main() { int n, data, position; //Create a singly linked list of n nodes printf("Enter the total number of nodes: "); scanf("%d", &n); createList(n); printf("\nOrginal list: \n"); displayList(); //Insert data between two nodes of the singly linked list printf("Enter data to insert a node between two nodes of the list: "); scanf("%d", &data); printf("Enter the position to insert new node: " ); scanf("%d", &position); insertNodeAtbetweentwonodes(data, position); printf("\nUpdated list: \n"); displayList(); return 0; } //Create a list of n nodes void createList(int n) { struct node *newNode, *temp; int data, i; head = (struct node *)malloc(sizeof(struct node)); //If unable to allocate memory for head node if(head == NULL) { printf("Unable to allocate memory."); } else { //Input data of node from the user printf("Enter the data of node 1: "); scanf("%d", &data); head->data = data; // Link the data field with data head->next = NULL; // Link the address field to NULL temp = head; //Creates n nodes and adds to linked list for(i=2; i<=n; i++) { newNode = (struct node *)malloc(sizeof(struct node)); //If memory is not allocated for newNode if(newNode == NULL) { printf("Unable to allocate memory."); break; } else { printf("Enter the data of node %d: ", i); scanf("%d", &data); newNode->data = data; // Link the data field of newNode with data newNode->next = NULL; // Link the address field of newNode with NULL temp->next = newNode; // Link previous node i.e. temp to the newNode temp = temp->next; } } printf("LIST CREATED SUCCESSFULLY\n"); } } //Creates a new node and inserts between two nodes of the linked list. void insertNodeAtbetweentwonodes(int data, int position) { int i; struct node *newNode, *temp; newNode = (struct node*)malloc(sizeof(struct node)); if(newNode == NULL) { printf("Unable to allocate memory."); } else { newNode->data = data; // Link data part newNode->next = NULL; temp = head; //Traverse to the n-1 position for(i=2; i<=position-1; i++) { temp = temp->next; if(temp == NULL) break; } if(temp != NULL) { /* Link address part of new node */ newNode->next = temp->next; /* Link address part of n-1 node */ temp->next = newNode; printf("DATA INSERTED SUCCESSFULLY\n"); } else { printf("UNABLE TO INSERT DATA AT THE GIVEN POSITION\n"); } } } //Display entire list void displayList() { struct node *temp; //If the list is empty i.e. head = NULL if(head == NULL) { printf("List is empty."); } else { temp = head; while(temp != NULL) { printf("%d -> ", temp->data); // Print data of current node temp = temp->next; // Move to next node } printf("NULL\n"); } }