Insertion in the middle of Linked List in C++
Program for Singly Linked List Insertion and Deletion in C++
Lets try to understand how we can do Insertion and deletion Operations on a Linked List in C++. We will look at most effective methods to do so.
Method 1
Method 2
Method 1
Run
next; size++; } while (node != head); return size; } void insert(Node** head, int data, int &size) { Node* newNode = new Node(); newNode->data = data; newNode->next = *head; *head = newNode; size++; } void insertMiddle(Node** head, int data, int &size) { Node* newNode = new Node(); newNode->data = data; if (*head == NULL) { newNode->data = data; newNode->next = *head; *head = newNode; size++; return; } Node* temp = *head; int mid = (size % 2 == 0) ? (size / 2) : (size + 1) / 2; while (--mid) { temp = temp->next; } newNode->next = temp->next; temp->next = newNode; size++; } void display(Node* node) { cout << "Linked List: \n"; while (node != NULL) { cout << node->data << " "; node = node->next; } cout << "\n\n"; } int main() { Node* head = NULL; int size = 0; insert(&head, 25, size); insert(&head, 5, size); display(head); insertMiddle(&head, 10, size); display(head); insertMiddle(&head, 20, size); display(head); insertMiddle(&head, 15, size); display(head); return 0; }
Output
Linked List : 5 25 Linked List : 5 10 25 Linked List : 5 10 20 25 Linked List : 5 10 15 20 25
Method 2
Run
#include<iostream> using namespace std; class Node { public: int data; Node* next; }; class LinkedList { private: Node* head; int size; // Member variable to keep track of the size public: LinkedList() { head = NULL; size = 0; } int getCurrSize(); void insertMiddle(int data); void insert(int data); void display(); }; void LinkedList::insert(int data) { Node* newNode = new Node(); newNode->data = data; newNode->next = head; head = newNode; size++; } void LinkedList::insertMiddle(int data) { Node* newNode = new Node(); newNode->data = data; if (head == NULL) { newNode->data = data; newNode->next = head; head = newNode; size++; return; } Node* temp = head; int mid = (size % 2 == 0) ? (size / 2) : (size + 1) / 2; while (--mid) { temp = temp->next; } newNode->next = temp->next; temp->next = newNode; size++; } void LinkedList::display() { cout << "Linked List : \n"; Node* node = head; // as linked list will end when Node is Null while (node != NULL) { cout << node->data << " "; node = node->next; } cout << "\n\n"; } int main() { LinkedList* list = new LinkedList(); list->insert(25); list->insert(5); list->display(); list->insertMiddle(10); list->display(); list->insertMiddle(20); list->display(); list->insertMiddle(15); list->display(); return 0; }
Output
Linked List : 5 25 Linked List : 5 10 25 Linked List : 5 10 20 25 Linked List : 5 10 15 20 25
Approach 2: Without additional Global Size Variable
- Method 1: Using external functions
- Method 2: Using member functions
Method 1
Method 2
Method 1
#include<iostream> using namespace std; class Node { public: int data; Node *next; }; int getCurrSize(Node* node){ int size=0; while(node!=NULL){ node = node->next; size++; } return size; } void insert(Node** head, int data){ Node* newNode = new Node(); newNode->data = data; newNode->next = *head; *head = newNode; } void insertMiddle(Node** head, int data){ Node* newNode = new Node(); newNode->data = data; // if the LL was empty if(*head == NULL){ newNode->data = data; newNode->next = *head; *head = newNode; return; } // otherwise Node* temp = *head; int size = getCurrSize(*head); // find correct insertion position for middle int mid = (size % 2 == 0) ? (size/2) : (size+1)/2; // traverse to current mid position while(--mid){ temp = temp->next; } newNode->next = temp->next; temp->next = newNode; } void display(Node* node) { cout << "Linked List : \n"; // as linked list will end when Node is Null while(node!=NULL){ cout << node->data << " "; node = node->next; } cout << "\n\n"; } int main() { Node* head = NULL; insert(&head,25); insert(&head,5); display(head); insertMiddle(&head, 10); display(head); insertMiddle(&head, 20); display(head); insertMiddle(&head, 15); display(head); return 0; }
Output
Linked List : 5 25 Linked List : 5 10 25 Linked List : 5 10 20 25 Linked List : 5 10 15 20 25
Method 2
#include<iostream> using namespace std; class Node { public: int data; Node *next; }; class LinkedList { private: Node* head; public: LinkedList() { // constructor head = NULL; } int getCurrSize(); void insertMiddle(int data); void insert(int data); void display(); }; int LinkedList::getCurrSize(){ int size=0; Node* temp = head; while(temp!=NULL){ temp = temp->next; size++; } return size; } void LinkedList::insert(int data){ Node* newNode = new Node(); newNode->data = data; newNode->next = head; head = newNode; } void LinkedList::insertMiddle(int data){ Node* newNode = new Node(); newNode->data = data; // if the LL was empty if(head == NULL){ newNode->data = data; newNode->next = head; head = newNode; return; } // otherwise Node* temp = head; int size = getCurrSize(); // find correct insertion position for middle int mid = (size % 2 == 0) ? (size/2) : (size+1)/2; // traverse to current mid position while(--mid){ temp = temp->next; } newNode->next = temp->next; temp->next = newNode; } void LinkedList::display() { cout << "Linked List : \n"; Node* node = head; // as linked list will end when Node is Null while(node!=NULL){ cout << node->data << " "; node = node->next; } cout << "\n\n"; } int main() { LinkedList* list = new LinkedList(); list->insert(25); list->insert(5); list->display(); list->insertMiddle(10); list->display(); list->insertMiddle(20); list->display(); list->insertMiddle(15); list->display(); return 0; }
Output
Linked List : 5 25 Linked List : 5 10 25 Linked List : 5 10 20 25 Linked List : 5 10 15 20 25
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Get over 200+ course One Subscription
Courses like AI/ML, Cloud Computing, Ethical Hacking, C, C++, Java, Python, DSA (All Languages), Competitive Coding (All Languages), TCS, Infosys, Wipro, Amazon, DBMS, SQL and others
Singly Linked List
- Introduction to Linked List in Data Structure
Click Here - Linked List in –
- Singly Linked List in –
- Insertion in singly Linked List –
- Insertion at beginning in singly Linked List –
- Insertion at nth position in singly Linked List –
- Insertion at end in singly Linked List –
- Deletion in singly Linked List –
- Deletion from beginning in singly linked list :
- Deletion from nth position in singly linked list :
- Deletion from end in singly linked list :
- Linked List Insertion and Deletion –
C | C++ | Java - Reverse a linked list without changing links between nodes (Data reverse only) –
C | C++ | Java - Reverse a linked list by changing links between nodes –
- Print reverse of a linked list without actually reversing –
- Print reverse of a linked list without actually reversing –
- Insertion in the middle Singly Linked List –
- Insertion in a Sorted Linked List –
- Delete alternate nodes of a Linked List –
- Find middle of the linked list –
- Reverse a linked list in groups of given size –
- Find kth node from end of the linked list –
- Append the last n nodes of a linked list to the beginning of the list –
- Check whether linked list is palindrome or not –
- Fold a Linked List –
- Insert at given Position –
- Deletion at given Position –
Singly Linked List
- Introduction to Linked List in Data Structure
- Linked List in – C | C++ | Java
- Singly Linked List in – C | C++ | Java
- Insertion in singly Linked List – C | C++ | Java
- Deletion in singly Linked List – C | C++ | Java
- Reverse a linked list without changing links between nodes (Data reverse only) – C | C++ | Java
- Linked List Insertion and Deletion – C | C++ | Java
- Reverse a linked list by changing links between nodes – C | C++ | Java
- Linked List insertion in the middle – C | C++ | Java
- Print reverse of a linked list without actually reversing – C |C++ | Java
- Search an element in a linked list – C | C++ | Java
- Insertion in a Sorted Linked List – C | C++ | Java
- Delete alternate nodes of a Linked List – C | C++ | Java
- Find middle of the linked list – C | C++ | Java
- Reverse a linked list in groups of given size – C | C++ | Java
- Find kth node from end of the linked list – C | C++ | Java
- Append the last n nodes of a linked list to the beginning of the list – C | C++ | Java
- Check whether linked list is palindrome or not – C | C++ | Java
- Fold a Linked List – C | C++ | Java
- Insert at a given position – C | C++ | Java
- Delete at a given position – C | C++ | Java
Login/Signup to comment