Insert node at the middle of Singly Linked List
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }*head; void Starting_Link_List(int n); void insertNodeAtMiddle(int data, int position); void ShowSingly_List(); int main() { int n, data, position; printf("Please Enter the total number of nodes: "); scanf("%d", &n); Starting_Link_List(n); printf("\nData in the singly link list \n"); ShowSingly_List(); /* * Insert data at middle of the singly linked list */ printf("n Please Enter data to insert at middle of the list: "); scanf("%d", &data); printf("Enter the position to insert new node: " ); scanf("%d", &position); insertNodeAtMiddle(data, position); printf("\n Data in the SINGLY LINK list \n"); ShowSingly_List(); return 0; } void Starting_Link_List(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("Sorry! Unable to allocate memory."); } else { /* * Input data of node from the user */ printf("Please Enter the data for 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("Sorry! Unable to allocate memory."); break; } else { printf("Please Enter the data of node %d: ", i); scanf("%d", &data); newNode->data = data; // Linking the data of newNode with data newNode->next = NULL; // Linking the address of newNode with NULL temp->next = newNode; // Linking previous node temp = temp->next; } } printf("Congratulations! Your SINGLY LINKED LIST is CREATED.\n"); } } void insertNodeAtMiddle(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 ShowSingly_List() { 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("Data = %d\n", temp->data); // Print data of current node temp = temp->next; // Move to next node } } } |