Recursive function to delete k-th node from linked list

• Difficulty Level : Easy
• Last Updated : 26 Jul, 2022

Given a singly linked list, delete a node at the kth position without using the loop.

Examples:

```Input : list = 9->8->3->5->2->1
k = 4
Output : 9->8->3->2->1

Input  : list = 0->0->1->6->2->3
k = 3
Output : 0->0->6->2->3  ```

We recursively reduce the value of k. When k reaches 1, we delete the current node and return the next current node as a new node. When the function returns, we link the returned node to the next previous node.

Implementation:

C++

 `// Recursive CPP program to delete k-th node ``// of a linked list``#include ``using` `namespace` `std;`` ` `struct` `Node {``    ``int` `data;``    ``struct` `Node* next;``};`` ` `// Deletes k-th node and returns new header.``Node* deleteNode(Node* start, ``int` `k)``{``    ``// If invalid k``    ``if` `(k < 1)``       ``return` `start;`` ` `    ``// If linked list is empty ``    ``if` `(start == NULL)``       ``return` `NULL;``  ` `    ``// Base case (start needs to be deleted)``    ``if` `(k == 1)``    ``{``        ``Node *res = start->next;``        ``delete``(start);``        ``return` `res;  ``    ``}``     ` `    ``start->next = deleteNode(start->next, k-1);``    ``return` `start;``}`` ` `/* Utility function to insert a node at the beginning */``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;``}``  ` `/* Utility function to print a linked list */``void` `printList(``struct` `Node *head)``{``    ``while` `(head!=NULL)``    ``{``        ``cout << head->data << ``" "``;``        ``head = head->next;``    ``}``    ``printf``(``"\n"``);``}``  ` `/* Driver program to test above functions */``int` `main()``{``    ``struct` `Node *head = NULL;``  ` `    ``/* Create following linked list``      ``12->15->10->11->5->6->2->3 */``    ``push(&head,3);``    ``push(&head,2);``    ``push(&head,6);``    ``push(&head,5);``    ``push(&head,11);``    ``push(&head,10);``    ``push(&head,15);``    ``push(&head,12);``   ` `    ``int` `k = 3;``    ``head = deleteNode(head, k);``  ` `    ``printf``(``"\nModified Linked List: "``);``    ``printList(head);``  ` `    ``return` `0;``}`

Java

 `// Recursive Java program to delete k-th node ``// of a linked list ``class` `GFG``{``     ` `static` `class` `Node ``{ ``    ``int` `data; ``    ``Node next; ``}; `` ` `// Deletes k-th node and returns new header. ``static` `Node deleteNode(Node start, ``int` `k) ``{ ``    ``// If invalid k ``    ``if` `(k < ``1``) ``    ``return` `start; `` ` `    ``// If linked list is empty ``    ``if` `(start == ``null``) ``    ``return` `null``; `` ` `    ``// Base case (start needs to be deleted) ``    ``if` `(k == ``1``) ``    ``{ ``        ``Node res = start.next; ``        ``return` `res; ``    ``} ``     ` `    ``start.next = deleteNode(start.next, k-``1``); ``    ``return` `start; ``} `` ` `// Utility function to insert a node at the beginning /``static` `Node 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; ``    ``return` `head_ref;``} `` ` `// Utility function to print a linked list /``static` `void` `printList( Node head) ``{ ``    ``while` `(head!=``null``) ``    ``{ ``        ``System.out.print(head.data + ``" "``); ``        ``head = head.next; ``    ``} ``    ``System.out.printf(``"\n"``); ``} `` ` `// Driver program to test above functions /``public` `static` `void` `main(String args[])``{ ``    ``Node head = ``null``; `` ` `    ``// Create following linked list ``    ``//12.15.10.11.5.6.2.3 /``    ``head=push(head,``3``); ``    ``head=push(head,``2``); ``    ``head=push(head,``6``); ``    ``head=push(head,``5``); ``    ``head=push(head,``11``); ``    ``head=push(head,``10``); ``    ``head=push(head,``15``); ``    ``head=push(head,``12``); ``     ` `    ``int` `k = ``3``; ``    ``head = deleteNode(head, k); `` ` `    ``System.out.printf(``"\nModified Linked List: "``); ``    ``printList(head); ``}``} ``   ` `// This code is contributed by Arnab Kundu`

Python3

 `# Recursive Java program to delete k-th node ``# of a linked list ``class` `Node(``object``): ``    ``def` `__init__(``self``, d): ``        ``self``.data ``=` `d ``        ``self``.``next` `=` `None`` ` `# Deletes k-th node and returns new header. ``def` `deleteNode(start, k) :`` ` `    ``# If invalid k ``    ``if` `(k < ``1``) :``        ``return` `start `` ` `    ``# If linked list is empty ``    ``if` `(start ``=``=` `None``): ``        ``return` `None`` ` `    ``# Base case (start needs to be deleted) ``    ``if` `(k ``=``=` `1``) :``     ` `        ``res ``=` `start.``next``        ``return` `res ``     ` `    ``start.``next` `=` `deleteNode(start.``next``, k ``-` `1``) ``    ``return` `start `` ` `# Utility function to insert a node ``# at the beginning ``def` `push(head_ref, new_data) :``  ` `    ``new_node ``=` `Node(``0``) ``    ``new_node.data ``=` `new_data ``    ``new_node.``next` `=` `head_ref ``    ``head_ref ``=` `new_node ``    ``return` `head_ref`` ` `# Utility function to print a linked list ``def` `printList( head) :`` ` `    ``while` `(head !``=` `None``): ``     ` `        ``print``(head.data, end ``=` `" "``) ``        ``head ``=` `head.``next``     ` `    ``print``(``"\n"``) `` ` `# Driver Code``head ``=` `None`` ` `# Create following linked list ``# 12.15.10.11.5.6.2.3 /``head ``=` `push(head, ``3``) ``head ``=` `push(head, ``2``) ``head ``=` `push(head, ``6``) ``head ``=` `push(head, ``5``) ``head ``=` `push(head, ``11``) ``head ``=` `push(head, ``10``) ``head ``=` `push(head, ``15``) ``head ``=` `push(head, ``12``) ``     ` `k ``=` `3``head ``=` `deleteNode(head, k) `` ` `print``(``"Modified Linked List: "``, end ``=` `"") ``printList(head) `` ` `# This code is contributed by Arnab Kundu`

C#

 `// Recursive C# program to delete k-th node ``// of a linked list ``using` `System;`` ` `class` `GFG``{``     ` `    ``public` `class` `Node ``    ``{ ``        ``public` `int` `data; ``        ``public` `Node next; ``    ``}; ``     ` `    ``// Deletes k-th node and returns new header. ``    ``static` `Node deleteNode(Node start, ``int` `k) ``    ``{ ``        ``// If invalid k ``        ``if` `(k < 1) ``        ``return` `start; ``     ` `        ``// If linked list is empty ``        ``if` `(start == ``null``) ``        ``return` `null``; ``     ` `        ``// Base case (start needs to be deleted) ``        ``if` `(k == 1) ``        ``{ ``            ``Node res = start.next; ``            ``return` `res; ``        ``} ``         ` `        ``start.next = deleteNode(start.next, k-1); ``        ``return` `start; ``    ``} ``     ` `    ``// Utility function to insert a node at the beginning /``    ``static` `Node 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; ``        ``return` `head_ref;``    ``} ``     ` `    ``// Utility function to print a linked list /``    ``static` `void` `printList( Node head) ``    ``{ ``        ``while` `(head != ``null``) ``        ``{ ``            ``Console.Write(head.data + ``" "``); ``            ``head = head.next; ``        ``} ``        ``Console.Write(``"\n"``); ``    ``} ``     ` `    ``// Driver program to test above functions /``    ``public` `static` `void` `Main(String []args)``    ``{ ``        ``Node head = ``null``; ``     ` `        ``// Create following linked list ``        ``//12.15.10.11.5.6.2.3 /``        ``head=push(head,3); ``        ``head=push(head,2); ``        ``head=push(head,6); ``        ``head=push(head,5); ``        ``head=push(head,11); ``        ``head=push(head,10); ``        ``head=push(head,15); ``        ``head=push(head,12); ``         ` `        ``int` `k = 3; ``        ``head = deleteNode(head, k); ``     ` `        ``Console.Write(``"\nModified Linked List: "``); ``        ``printList(head); ``    ``}``} `` ` `/* This code contributed by PrinciRaj1992 */`

Javascript

 ``

Output

`Modified Linked List: 12 15 11 5 6 2 3 `

Time Complexity:  O(n)
Auxiliary Space: O(n)

This article is contributed by Mohd Saleem. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up