 GeeksforGeeks App
Open App Browser
Continue

# Delete a linked list using recursion

Delete the given linked list using recursion

Method:

1. If head equal to NULL then linked list is empty, we simply return.

Implementation:

## 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);``  ` `      ``// Since head now points to illgal address, we should set head = NULL:``      ``head = NULL;``    ``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 construct below 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 construct below 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`

## Javascript

 ``

Output

``` Deleting linked list