Delete node from linked list with specific value C++

Linked List | Set 3 [Deleting a node]

We have discussed Linked List Introduction and Linked List Insertion in previous posts on a singly linked list.
Let us formulate the problem statement to understand the deletion process. Given a ‘key’, delete the first occurrence of this key in the linked list.

Iterative Method:
To delete a node from the linked list, we need to do the following steps.
1] Find the previous node of the node to be deleted.
2] Change the next of the previous node.
3] Free memory for the node to be deleted.

Delete a Linked List node at a given position

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

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

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

using namespace std;

// A linked list node

class 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 node

void printList[Node* node]

{

while [node != NULL] {

cout data next;

}

}

// Driver code

int 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 next; // Advancing the head pointer

temp->next=NULL;

free[temp]; // Node is deleted

}

else

{

for[i=0;inext;

}

// Now temp pointer points to the previous node of the node to be deleted

struct node *del =temp->next; // del pointer points to the node to be deleted

temp->next=temp->next->next;

printf["\nElement deleted is : %d\n",del->data];

del->next=NULL;

free[del]; // Node is deleted

}

printf["\nUpdated Linked List is : \n"];

display_List[];

return ;

}

void insert[int value]

{

struct node *newnode; // Creating a new node

newnode = [struct node *]malloc[sizeof[struct node]]; // Allocating dynamic memory

newnode->data = value; // Assigning value to newnode

newnode->next = NULL;

if[head==NULL] // Checking if List is empty

{

head = newnode;

tail = newnode;

}

else // If not empty then...

{

tail->next=newnode;

tail=newnode; // Updating the tail node with each insertion

}

return ;

}

void display_List[]

{

struct node *temp; // Creating a temporary pointer to the structure

temp=head; // temp points to head;

while[temp!=NULL]

{

if[temp->next==NULL]

{

printf[" %d->NULL",temp->data];

}

else

{

printf[" %d->",temp->data];

}

temp=temp->next; // Traversing the List till end

}

printf["\n"];

return ;

}

// --Driver Code--

int main[]

{

insert[10];

insert[20];

insert[30];

insert[40];

insert[50];

insert[60];

printf["\n--Created Linked List--\n"];

display_List[];

printf["\nLinked List after deletion at position 0"];

delete[0]; // List indexing starts from 0

printf["\nLinked List after deletion at position 2"];

delete[2];

return 0;

}

// This code is contributed by Sanjeeban Mukhopadhyay.

Java




// A complete working Java program to delete a node in a

// linked list at a given position

class LinkedList {

Node head; // head of list

/* Linked list Node*/

class Node {

int data;

Node next;

Node[int d]

{

data = d;

next = null;

}

}

/* Inserts a new Node at front of the list. */

public void push[int new_data]

{

/* 1 & 2: Allocate the Node &

Put in the data*/

Node new_node = new Node[new_data];

/* 3. Make next of new Node as head */

new_node.next = head;

/* 4. Move the head to point to new Node */

head = 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[int position]

{

// If linked list is empty

if [head == null]

return;

// Store head node

Node temp = head;

// If head needs to be removed

if [position == 0] {

head = temp.next; // Change head

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;

temp.next

= next; // Unlink the deleted node from list

}

/* This function prints contents of linked list starting

from the given node */

public void printList[]

{

Node tnode = head;

while [tnode != null] {

System.out.print[tnode.data + " "];

tnode = tnode.next;

}

}

/* Driver program to test above functions. Ideally this

function should be in a separate user class. It is

kept here to keep code compact */

public static void main[String[] args]

{

/* Start with the empty list */

LinkedList llist = new LinkedList[];

llist.push[7];

llist.push[1];

llist.push[3];

llist.push[2];

llist.push[8];

System.out.println["\nCreated Linked list is: "];

llist.printList[];

llist.deleteNode[4]; // Delete node at position 4

System.out.println[

"\nLinked List after Deletion at position 4: "];

llist.printList[];

}

}

Python3




# Python program to delete a node in a linked list

# at a given position

# Node class

class Node:

# Constructor to initialize the node object

def __init__[self, data]:

self.data = data

self.next = None

class LinkedList:

# Constructor to initialize head

def __init__[self]:

self.head = None

# Function to insert a new node at the beginning

def push[self, new_data]:

new_node = Node[new_data]

new_node.next = self.head

self.head = new_node

# Given a reference to the head of a list

# and a position, delete the node at a given position

#This delete function code is contributed by Arabin Islam

def deleteNode[self, position]:

if self.head is None:

return

if position == 0:

self.head = self.head.next

return self.head

index = 0

current = self.head

prev = self.head

temp = self.head

while current is not None:

if index == position:

temp = current.next

break

prev = current

current = current.next

index += 1

prev.next = temp

return prev

# Utility function to print the linked LinkedList

def printList[self]:

temp = self.head

while[temp]:

print [" %d " % [temp.data],end=" "]

temp = temp.next

# Driver program to test above function

llist = LinkedList[]

llist.push[7]

llist.push[1]

llist.push[3]

llist.push[2]

llist.push[8]

print ["Created Linked List: "]

llist.printList[]

llist.deleteNode[4]

print ["\nLinked List after Deletion at position 4: "]

llist.printList[]

# This code is contributed by Nikhil Kumar Singh[nickzuck_007]

C#




// A complete working C# program to delete

// a node in a linked list at a given position

using System;

class GFG {

// Head of list

Node head;

// Linked list Node

public class Node {

public int data;

public Node next;

public Node[int d]

{

data = d;

next = null;

}

}

// Inserts a new Node at front of the list.

public void Push[int new_data]

{

/* 1 & 2: Allocate the Node &

Put in the data*/

Node new_node = new Node[new_data];

/* 3. Make next of new Node as head */

new_node.next = head;

/* 4. Move the head to point to new Node */

head = 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[int position]

{

// If linked list is empty

if [head == null]

return;

// Store head node

Node temp = head;

// If head needs to be removed

if [position == 0] {

// Change head

head = temp.next;

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 deleted node from list

temp.next = next;

}

// This function prints contents of

// linked list starting from the

// given node

public void printList[]

{

Node tnode = head;

while [tnode != null] {

Console.Write[tnode.data + " "];

tnode = tnode.next;

}

}

// Driver code

public static void Main[String[] args]

{

// Start with the empty list

GFG llist = new GFG[];

llist.Push[7];

llist.Push[1];

llist.Push[3];

llist.Push[2];

llist.Push[8];

Console.WriteLine["\nCreated Linked list is: "];

llist.printList[];

// Delete node at position 4

llist.deleteNode[4];

Console.WriteLine["\nLinked List after "

+ "Deletion at position 4: "];

llist.printList[];

}

}

// This code is contributed by Rajput-Ji

Javascript




// A complete working javascript program to

// delete a node in a linked list at a

// given position

// head of list

var head;

/* Linked list Node */

class Node

{

constructor[val]

{

this.data = val;

this.next = null;

}

}

/* Inserts a new Node at front of the list. */

function push[new_data]

{

/*

* 1 & 2: Allocate the Node & Put in the data

*/

var new_node = new Node[new_data];

/* 3. Make next of new Node as head */

new_node.next = head;

/* 4. Move the head to point to new Node */

head = new_node;

}

/*

* Given a reference [pointer to pointer] to the

* head of a list and a position,

* deletes the node at the given position

*/

function deleteNode[position]

{

// If linked list is empty

if [head == null]

return;

// Store head node

var temp = head;

// If head needs to be removed

if [position == 0]

{

// Change head

head = temp.next;

return;

}

// Find previous node of the node to be deleted

for[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

var next = temp.next.next;

// Unlink the deleted node from list

temp.next = next;

}

/*

* This function prints contents of linked

* list starting from the given node

*/

function printList[]

{

var tnode = head;

while [tnode != null]

{

document.write[tnode.data + " "];

tnode = tnode.next;

}

}

/*

* Driver program to test above functions.

* Ideally this function should be in a

* separate user class. It is kept here

* to keep code compact

*/

/* Start with the empty list */

push[7];

push[1];

push[3];

push[2];

push[8];

document.write["Created Linked list is:
"];

printList[];

// Delete node at position 4

deleteNode[4];

document.write["
Linked List after " +

"Deletion at position 4:
"];

printList[];

// This code is contributed by todaysgaurav

Output:

--Created Linked List-- 10-> 20-> 30-> 40-> 50-> 60->NULL Linked List after deletion at position 0 Element deleted is : 10 Updated Linked List is : 20-> 30-> 40-> 50-> 60->NULL Linked List after deletion at position 2 Element deleted is : 40 Updated Linked List is : 20-> 30-> 50-> 60->NULL

Thanks to Hemanth Kumar for suggesting initial solution. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above




Article Tags :

Linked List

Samsung

Practice Tags :

Samsung

Linked List

Read Full Article

7.10: Linked List Node Delete

  1. Last updated
  2. Save as PDF
  • Page ID34680
    • Text Author[s]: Patrick McClanahan
    • Associate Professor [Computer Science] at San Joaquin Delta College

    \[ \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}}}\] \[ \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{#1}}} \]\[\newcommand{\id}{\mathrm{id}}\] \[ \newcommand{\Span}{\mathrm{span}}\] \[ \newcommand{\kernel}{\mathrm{null}\,}\] \[ \newcommand{\range}{\mathrm{range}\,}\] \[ \newcommand{\RealPart}{\mathrm{Re}}\] \[ \newcommand{\ImaginaryPart}{\mathrm{Im}}\] \[ \newcommand{\Argument}{\mathrm{Arg}}\] \[ \newcommand{\norm}[1]{\| #1 \|}\] \[ \newcommand{\inner}[2]{\langle #1, #2 \rangle}\] \[ \newcommand{\Span}{\mathrm{span}}\] \[\newcommand{\id}{\mathrm{id}}\] \[ \newcommand{\Span}{\mathrm{span}}\] \[ \newcommand{\kernel}{\mathrm{null}\,}\] \[ \newcommand{\range}{\mathrm{range}\,}\] \[ \newcommand{\RealPart}{\mathrm{Re}}\] \[ \newcommand{\ImaginaryPart}{\mathrm{Im}}\] \[ \newcommand{\Argument}{\mathrm{Arg}}\] \[ \newcommand{\norm}[1]{\| #1 \|}\] \[ \newcommand{\inner}[2]{\langle #1, #2 \rangle}\] \[ \newcommand{\Span}{\mathrm{span}}\]

    1. Delete Node

    C program to delete a node from linked list

    #include #include /* A structure of linked list node */ struct node { int data; struct node *next; } *head; void initialize[]{ head = NULL; } /* Given a Inserts a node in front of a singly linked list. */ void insert[int num] { /* Create a new Linked List node */ struct node* newNode = [struct node*] malloc[sizeof[struct node]]; newNode->data = num; /* Next pointer of new node will point to head node of linked list */ newNode->next = head; /* make new node as new head of linked list */ head = newNode; printf["Inserted Element : %d\n", num]; } void deleteNode[struct node *head, int num] { struct node *current = head, *previous; /* Input Validation */ if [head == NULL] { printf["Error : Invalid node pointer !!!\n"]; return; } /* If head head node itself contains num, then delete head node and shift head pointer */ if [current->data == num] { head = current->next; free[current]; return; } /* Traverse given linked list and search for key. If found, keep a pointer to previous node also. */ while [current != NULL && current->data != num] { previous = current; current = current->next; } /* num not found in given Linked list */ if [current == NULL]{ printf["%d not found in Linked List\n"]; return; } /* Set next pointer of previous node to next pointer of temp[current node]*/ previous->next = current->next; /* DeAllocate memory of node */ free[current]; } /* Prints a linked list from head node till tail node */ void printLinkedList[struct node *nodePtr] { while [nodePtr != NULL] { printf["%d", nodePtr->data]; nodePtr = nodePtr->next; if[nodePtr != NULL] printf["-->"]; } } int main[] { initialize[]; /* Creating a linked List*/ insert[2]; insert[4]; insert[5]; insert[9]; printf["\nBefore Deletion\n"]; printLinkedList[head]; /* Deleting a node from Linked List */ deleteNode[head, 5]; /* Deleting head node */ deleteNode[head, 2]; printf["\nAfter Deletion\n"]; printLinkedList[head]; return 0; } Output
    Inserted Element : 2 Inserted Element : 4 Inserted Element : 5 Inserted Element : 9 Before Deletion 9-->5-->4-->2 After Deletion 9-->4

    Video liên quan

    Bài mới nhất

    Chủ Đề