C++ Program For Deleting A Linked List Node At A Given Position - GeeksforGeeks

29 Dec, 2021
Given a singly linked list and a position, delete a linked list node at the given position.
Example:  
Input: position = 1, Linked List = 8->2->3->1->7
Output: Linked List =  8->3->1->7

Input: position = 0, Linked List = 8->2->3->1->7
Output: Linked List = 2->3->1->7
If the node to be deleted is the root, simply delete it. To delete a middle node, we must have a pointer to the node previous to the node to be deleted. So if positions are not zero, we run a loop position-1 times and get a pointer to the previous node.
Below is the implementation of the above idea.
C++
// A complete working C++ program to delete// a node in a linked list at a given position#include <iostream>using namespace std;  // A linked list nodeclass Node{    public:    int data;    Node *next;};  // Given a reference (pointer to pointer) to // the head of a list and an int inserts a // new node on the front of the list. void push(Node** head_ref, int new_data){    Node* new_node = new Node();    new_node->data = new_data;    new_node->next = (*head_ref);    (*head_ref) = new_node;}  // Given a reference (pointer to pointer) to// the head of a list and a position, deletes// the node at the given position void deleteNode(Node **head_ref, int position){          // If linked list is empty    if (*head_ref == NULL)        return;          // Store head node    Node* temp = *head_ref;      // If head needs to be removed    if (position == 0)    {                  // Change head        *head_ref = temp->next;                   // Free old head        free(temp);                     return;    }      // Find previous node of the node to be deleted    for(int i = 0; temp != NULL && i < position - 1; i++)        temp = temp->next;      // If position is more than number of nodes    if (temp == NULL || temp->next == NULL)        return;      // Node temp->next is the node to be deleted    // Store pointer to the next of node to be deleted     Node *next = temp->next->next;      // Unlink the node from linked list    free(temp->next); // Free memory          // Unlink the deleted node from list    temp->next = next; }  // This function prints contents of linked // list starting from the given nodevoid printList( Node *node){    while (node != NULL)    {        cout << node->data << " ";        node = node->next;    }}  // Driver codeint main(){          // Start with the empty list     Node* head = NULL;      push(&head, 7);    push(&head, 1);    push(&head, 3);    push(&head, 2);    push(&head, 8);      cout << "Created Linked List: ";    printList(head);    deleteNode(&head, 4);    cout << "Linked List after Deletion at position 4: ";    printList(head);    return 0;}  // This code is contributed by premsai2030
Output: 
Created Linked List: 
 8  2  3  1  7 
Linked List after Deletion at position 4: 
 8  2  3  1 
Please refer complete article on Delete a Linked List node at a given position for more details!
Linked Lists
Samsung
C++
C++ Programs
Linked List
Samsung
Linked List
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Operator Overloading in C++
Polymorphism in C++
Friend class and function in C++
Sorting a vector in C++
Iterators in C++ STL
Header files in C/C++ and its uses
C++ Program for QuickSort
How to return multiple values from a function in C or C++?
Program to print ASCII Value of a character
Sorting a Map by value in C++ STL