Recursive function to delete k-th node from linked list

Given a singly linked list delete node at k-th position without using 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 value of k. When k reaches 1, we delete current node and return next of current node as new node. When function returns, we link the returned node as next of previous node.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output:

Modified Linked List: 12 15 11 5 6 2 3 

This article is contributed by Mohd Saleem. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.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

Improved By : andrew1234, princiraj1992



Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.