Skip to content
Related Articles

Related Articles

Improve Article

Recursive function to delete k-th node from linked list

  • Difficulty Level : Easy
  • Last Updated : 28 May, 2021

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

Examples: 

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.

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. 



C++




// Recursive CPP program to delete k-th node
// of a linked list
#include <bits/stdc++.h>
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




<script>
// Recursive javascript program to delete k-th node
// of a linked list    
    class Node {
        constructor(val) {
            this.data = val;
            this.next = null;
        }
    }
 
    // Deletes k-th node and returns new header.
    function deleteNode(start , 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) {
            var res = start.next;
            return res;
        }
 
        start.next = deleteNode(start.next, k - 1);
        return start;
    }
 
    // Utility function to insert a node at the beginning /
    function push(head_ref , new_data) {
        var new_node = new Node();
        new_node.data = new_data;
        new_node.next = head_ref;
        head_ref = new_node;
        return head_ref;
    }
 
    // Utility function to prvar a linked list /
    function printList(head) {
        while (head != null) {
            document.write(head.data + " ");
            head = head.next;
        }
        document.write("\n");
    }
 
    // Driver program to test above functions /
     
        var 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);
 
        var k = 3;
        head = deleteNode(head, k);
 
        document.write("\nModified Linked List: ");
        printList(head);
 
// This code is contributed by todaysgaurav
</script>

Output: 

Modified Linked List: 12 15 11 5 6 2 3 

 

?list=PLqM7alHXFySH41ZxzrPNj2pAYPOI8ITe7 
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 contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :