Función recursiva para eliminar el k-ésimo Node de la lista vinculada

Dada una lista enlazada individualmente, elimine un Node en la posición k-ésima sin usar el ciclo.

Ejemplos: 

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

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *