Skip to content
Related Articles

Related Articles

Delete a linked list using recursion
  • Difficulty Level : Easy
  • Last Updated : 30 Oct, 2020

Delete the given linked list using recursion

Method
1) If head equal to NULL then linked list is empty, we simply return.
2) Recursively delete linked list after head node.
3) Delete head node.

C++




// C++ program to recursively delete a linked list
#include <bits/stdc++.h>
  
/* Link list node */
struct Node {
    int data;
    struct Node* next;
};
  
/* Recursive Function to delete the entire linked list */
void deleteList(struct Node* head)
{
    if (head == NULL)
        return;
    deleteList(head->next); 
    free(head);
}
  
/* Given a reference (pointer to pointer) to 
   the head of a list and an int, push a new
   node on the front of the list. */
void push(struct Node** head_ref, int new_data)
{
    struct Node* new_node = new Node;
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
  
/* Driver program to test count function*/
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
  
    /* Use push() to construct below list
    1->12->1->4->1 */
    push(&head, 1);
    push(&head, 4);
    push(&head, 1);
    push(&head, 12);
    push(&head, 1);
    printf("\n Deleting linked list");
    deleteList(head);
    printf("\nLinked list deleted");
    return 0;
}


Java




// Java program to recursively delete a linked list
class GFG 
{
  
/* Link list node */
static class Node 
{
    int data;
    Node next;
};
  
/* Recursive Function to delete
the entire linked list */
static void deleteList(Node head)
{
    if (head == null)
        return;
    deleteList(head.next); 
    System.gc();
}
  
/* Given a reference (pointer to pointer) to 
the head of a list and an int, push a new
node on the front of the list. */
static 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;
}
  
/* Driver code*/
public static void main(String[] args) 
{
    /* Start with the empty list */
    Node head = new Node();
  
    /* Use push() to conbelow list
    1->12->1->4->1 */
    push(head, 1);
    push(head, 4);
    push(head, 1);
    push(head, 12);
    push(head, 1);
    System.out.print("\nDeleting linked list");
    deleteList(head);
    System.out.print("\nLinked list deleted");
}
}
  
/* This code contributed by PrinciRaj1992 */


Python3




# Python3 program to recursively delete 
# a linked list
import math
  
# Link list node 
class Node: 
    def __init__(self, data): 
        self.data = data 
        self.next = None
  
# Recursive Function to delete
# the entire linked list 
def deleteList(head):
    if (head == None):
        return
    deleteList(head.next
    # free(head)
  
# Given a reference (pointer to pointer) to the head 
# of a list and an int, head=push a new node 
# on the front of the list. 
def push(head_ref, new_data):
    new_node = Node(new_data)
    new_node.data = new_data
    new_node.next = head_ref
    head_ref = new_node
    return head_ref
  
# Driver Code
if __name__=='__main__':
      
    # Start with the empty list 
    head = None
  
    # Use head=push() to construct below list 1.12.1.4.1 
    head = push(head, 1)
    head = push(head, 4)
    head = push(head, 1)
    head = push(head, 12)
    head = push(head, 1)
    print("Deleting linked list")
    deleteList(head)
    print("Linked list deleted")
      
# This code is contributed by Srathore


C#




// C# program to recursively delete a linked list
using System;
  
class GFG 
{
  
/* Link list node */
public class Node 
{
    public int data;
    public Node next;
};
  
/* Recursive Function to delete
the entire linked list */
static void deleteList(Node head)
{
    if (head == null)
        return;
    deleteList(head.next); 
}
  
/* Given a reference (pointer to pointer) to 
the head of a list and an int, push a new
node on the front of the list. */
static 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;
}
  
/* Driver code*/
public static void Main(String[] args) 
{
    /* Start with the empty list */
    Node head = new Node();
  
    /* Use push() to conbelow list
    1->12->1->4->1 */
    push(head, 1);
    push(head, 4);
    push(head, 1);
    push(head, 12);
    push(head, 1);
    Console.Write("\nDeleting linked list");
    deleteList(head);
    Console.Write("\nLinked list deleted");
}
}
  
// This code contributed by Rajput-Ji


Output:

Deleting linked list
Linked list 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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :