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