Insert node in middle of linked list

C Exercises: Insert a new node at the middle of the Linked List

Last update on February 26 2020 08:07:28 (UTC/GMT +8 hours)

C Linked List : Exercise-6 with Solution

Write a program in C to insert a new node at the middle of Singly Linked List.

Pictorial Presentation:

Insert node in middle of linked list

Sample Solution:

C Code:

#include <stdio.h> #include <stdlib.h> struct node { int num; //Data of the node struct node *nextptr; //Address of the node }*stnode; void createNodeList(int n); //function to create the list void insertNodeAtMiddle(int num, int pos); //function to insert node at the middle void displayList(); //function to display the list int main() { int n,num,pos; printf("\n\n Linked List : Insert a new node at the middle of the Linked List :\n"); printf("-----------------------------------------------------------------------\n"); printf(" Input the number of nodes (3 or more) : "); scanf("%d", &n); createNodeList(n); printf("\n Data entered in the list are : \n"); displayList(); printf("\n Input data to insert in the middle of the list : "); scanf("%d", &num); printf(" Input the position to insert new node : " ); scanf("%d", &pos); if(pos<=1 || pos>=n) { printf("\n Insertion can not be possible in that position.\n "); } if(pos>1 && pos<n) { insertNodeAtMiddle(num, pos); printf("\n Insertion completed successfully.\n "); } printf("\n The new list are : \n"); displayList(); return 0; } void createNodeList(int n) { struct node *fnNode, *tmp; int num, i; stnode = (struct node *)malloc(sizeof(struct node)); if(stnode == NULL) //check whether the stnode is NULL and if so no memory allocation { printf(" Memory can not be allocated."); } else { // reads data for the node through keyboard printf(" Input data for node 1 : "); scanf("%d", &num); stnode-> num = num; stnode-> nextptr = NULL; //Links the address field to NULL tmp = stnode; //Creates n nodes and adds to linked list for(i=2; i<=n; i++) { fnNode = (struct node *)malloc(sizeof(struct node)); if(fnNode == NULL) //check whether the fnnode is NULL and if so no memory allocation { printf(" Memory can not be allocated."); break; } else { printf(" Input data for node %d : ", i); scanf(" %d", &num); fnNode->num = num; // links the num field of fnNode with num fnNode->nextptr = NULL; // links the address field of fnNode with NULL tmp->nextptr = fnNode; // links previous node i.e. tmp to the fnNode tmp = tmp->nextptr; } } } } void insertNodeAtMiddle(int num, int pos) { int i; struct node *fnNode, *tmp; fnNode = (struct node*)malloc(sizeof(struct node)); if(fnNode == NULL) { printf(" Memory can not be allocated."); } else { fnNode->num = num; //Links the data part fnNode->nextptr = NULL; tmp = stnode; for(i=2; i<=pos-1; i++) { tmp = tmp->nextptr; if(tmp == NULL) break; } if(tmp != NULL) { fnNode->nextptr = tmp->nextptr; //Links the address part of new node tmp->nextptr = fnNode; } else { printf(" Insert is not possible to the given position.\n"); } } } void displayList() { struct node *tmp; if(stnode == NULL) { printf(" No data found in the empty list."); } else { tmp = stnode; while(tmp != NULL) { printf(" Data = %d\n", tmp->num); // prints the data of current node tmp = tmp->nextptr; // advances the position of current node } } }

Sample Output:

Linked List : Insert a new node at the middle of the Linked List : ----------------------------------------------------------------------- Input the number of nodes (3 or more) : 4 Input data for node 1 : 1 Input data for node 2 : 2 Input data for node 3 : 3 Input data for node 4 : 4 Data entered in the list are : Data = 1 Data = 2 Data = 3 Data = 4 Input data to insert in the middle of the list : 5 Input the position to insert new node : 3 Insertion completed successfully. The new list are : Data = 1 Data = 2 Data = 5 Data = 3 Data = 4

Flowchart:

Insert node in middle of linked list

createNodeList():

Insert node in middle of linked list

insertNodeAtMiddle() :

Insert node in middle of linked list

displayList() :

Insert node in middle of linked list

C Programming Code Editor:

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Write a program in C to insert a new node at the end of a Singly Linked List.
Next: Write a program in C to delete first node of Singly Linked List.

What is the difficulty level of this exercise?

Easy Medium Hard


C Programming: Tips of the Day

What is the difference between fork and thread?

A fork gives you a brand new process, which is a copy of the current process, with the same code segments. As the memory image changes (typically this is due to different behavior of the two processes) you get a separation of the memory images (Copy On Write), however the executable code remains the same. Tasks do not share memory unless they use some Inter Process Communication (IPC) primitive.

One process can have multiple threads, each executing in parallel within the same context of the process. Memory and other resources are shared among threads, therefore shared data must be accessed through some primitive and synchronization objects that allow you to avoid data corruption.

Ref : https://bit.ly/3oYYTCn


  • New Content published on w3resource:
  • Scala Programming Exercises, Practice, Solution
  • Python Itertools exercises
  • Python Numpy exercises
  • Python GeoPy Package exercises
  • Python Pandas exercises
  • Python nltk exercises
  • Python BeautifulSoup exercises
  • Form Template
  • Composer - PHP Package Manager
  • PHPUnit - PHP Testing
  • Laravel - PHP Framework
  • Angular - JavaScript Framework
  • Vue - JavaScript Framework
  • Jest - JavaScript Testing Framework