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 `` ` `/* 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