DEV Community

Ankit Kumar
Ankit Kumar

Posted on

Insertion and Deletion on Linked List

`

include

using namespace std;

// Linked list definition
struct ListNode
{
// ListNode comprises data(any) and next(pointer point to next ListNode)
int data;
ListNode *next;

// Constructor for data initialization for different argument ListNode() : data(0), next(nullptr) {} ListNode(int x) : data(x), next(nullptr) {} ListNode(int x, ListNode *next) : data(x), next(next) {} 
Enter fullscreen mode Exit fullscreen mode

};

class Solution
{
private:
// Head of ListNode
ListNode *head;

public:
// Constructor to initialize head ListNode as nullptr
Solution() : head(nullptr) {}

// Insertion at beginning void InsertAtBegining(int data) { ListNode *newNode = new ListNode(data); // New ListNode creation via ListNode structure constructor(Dynamically) newNode->next = head; // Since head contain the address of first ListNode, put that address in newNode->next head = newNode; // Now head is pointing to newNode , i.e. newNode is the new head of ListNode } // Insertion at end void InsertionAtEnd(int data) { ListNode *newNode = new ListNode(data); // If list is empty, add newNode if (head == nullptr) { head = newNode; return; } // Traverse to the end of list ListNode *current = head; while (current->next != nullptr) { current = current->next; } // Now Add to the list current->next = newNode; } // Insertion at any position void InsertAtPosition(int data, int pos) { // If pos is less than 0 or equals, insert at beginning if (pos <= 0) { InsertAtBegining(data); return; } // Traverse to the ListNode before the specified position ListNode *current = head; for (int i = 0; i < pos - 1 && current != nullptr; i++) { current = current->next; } // If pos is greater than the length of linked list, insert at end if(current == nullptr) { InsertionAtEnd(data); return; } // Insert newNode at specified position ListNode *newNode = new ListNode(data); newNode->next = current->next; current->next = newNode; } // Deletion at beginning void DeletionAtBeginning() { if(head != nullptr) { ListNode *temp = head; head = temp->next; delete temp; } else { cout << "List is empty, Can't delete anything"; } } // Deletion at End void DeletionAtEnd() { // List is empty if(head == nullptr) { cout << "List is empty, Can't delete anything"; return; } // If there is only one ListNode, make head equals nullptr if(head->next == nullptr) { delete head; head = nullptr; return; } // Traverse from second ListNode to last ListNode ListNode *temp = head; while(temp->next->next != nullptr) { temp = temp->next; } delete temp->next; temp->next = nullptr; } // Deletion at any position void DeleteAtPosition(int pos) { // Invalid position or list is empty if(pos < 0 || head == nullptr) { cout << "List is empty or invalid position"; return; } // First position if(pos == 0) { DeletionAtBeginning(); return; } // Traverse till specified position ListNode *current = head; for (int i = 0; i < pos - 1 && current != nullptr; i++) { current = current->next; } // Specified position is beyond the ListNode length if(current == nullptr || current->next == nullptr) { cout << "Given position is beyond ListNode length"; return; } // Delition at specified position ListNode *temp = current->next; current->next = current->next->next; delete temp; } void printList() { while (head != nullptr) { cout << head->data << " "; head = head->next; } } 
Enter fullscreen mode Exit fullscreen mode

};

int main()
{
Solution s;
s.InsertAtBegining(1);
s.InsertAtBegining(2);
s.InsertAtPosition(3,1);
s.InsertAtPosition(4,2);
s.InsertionAtEnd(1);
s.InsertionAtEnd(2);
s.InsertionAtEnd(3);
s.InsertionAtEnd(4);
s.DeletionAtBeginning();

s.DeletionAtEnd();

s.DeleteAtPosition(3);

s.printList();
}`

Top comments (0)