# Linked List | Set 3 (Deleting a node)

• Difficulty Level : Easy
• Last Updated : 22 Nov, 2021

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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Since every node of the linked list is dynamically allocated using malloc() in C, we need to call free() for freeing memory allocated for the node to be deleted.

## C#

 // A complete working C# program// to demonstrate deletion in// singly linked listusing System;class GFG{ // Head of listNode head; // Linked list Nodepublic class Node{  public int data;  public Node next;  public Node(int d)  {    data = d;    next = null;  }} // Given a key, deletes the first// occurrence of key in linked listvoid deleteNode(int key){  // Store head node  Node temp = head, prev = null;   // If head node itself holds  // the key to be deleted  if (temp != null &&      temp.data == key)  {    // Changed head    head = temp.next;    return;  }   // Search for the key to be  // deleted, keep track of the  // previous node as we need  // to change temp.next  while (temp != null &&         temp.data != key)  {    prev = temp;    temp = temp.next;  }      // If key was not present  // in linked list  if (temp == null)    return;   // Unlink the node from linked list  prev.next = temp.next;} // Inserts a new Node at// front of the list.public void Push(int new_data){  Node new_node = new Node(new_data);  new_node.next = head;  head = new_node;} // This function prints contents// of linked list starting from// the given nodepublic void printList(){  Node tnode = head;  while (tnode != null)  {    Console.Write(tnode.data + " ");    tnode = tnode.next;  }}   // Driver codepublic static void Main(String[] args){  GFG llist = new GFG();   llist.Push(7);  llist.Push(1);  llist.Push(3);  llist.Push(2);   Console.WriteLine("\nCreated Linked list is:");  llist.printList();   // Delete node with data 1  llist.deleteNode(1);   Console.WriteLine("\nLinked List after Deletion of 1:");  llist.printList();}} // This code is contributed by Rajput-Ji

## Javascript


Output
2  3  1  7
Linked List after Deletion of 1:
2  3  7

Recursive Method:

To delete a node of a linked list recursively we need to do the following steps.

1. We pass node* (node pointer) as a reference to the function (as in node* &head)

2. Now since the current node pointer is derived from the previous node’s next (which is passed by reference) so now if the value of the current node pointer is changed, the previous next node’s value also gets changed which is the required operation while deleting a node (i.e points previous node’s next to current node’s (containing key) next).

3. Find the node containing the given value.

4. Store this node to deallocate it later using the free() function.

5. Change this node pointer so that it points to its next and by performing this previous node’s next also gets properly linked.

Below is the implementation of the above approach.