Given a LinkedList and an index (1-based). The task is to find the data value stored in the node at that kth position. If no such node exists whose index is k then return -1.
Example:
Input: 1->10->30->14, index = 2 Output: 10 Explanation: The node value at index 2 is 10
Input: 1->32->12->10->30->14->100, index = 8 Output: -1 Explanation: No such node exists at index = 8.
[Naive Approach] Recursive Method - O(n) Time and O(n) Space
The idea is to use the recursive method to find the value of index node (1- based) . Call the function GetNth(head,index) recusively, where head will represent the current head node . Decrement the index value by 1 on every recursion call. When the n reaches 1 ,we will return the data of current node.
Below is the implementation of above approach:
C++
//C++ program to find the data at nth node//recursively#include<bits/stdc++.h>usingnamespacestd;structNode{intdata;Node*next;Node(intx){data=x;next=NULL;}};// Takes head pointer of the linked list and index// as arguments and returns data at index.intGetNth(Node*head,intindex){// If the list is empty or index is out of boundsif(head==NULL)return-1;// If index equals 1, return node's dataif(index==1)returnhead->data;// Recursively move to the next nodereturnGetNth(head->next,index-1);}intmain(){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5Node*head=newNode(1);head->next=newNode(2);head->next->next=newNode(3);head->next->next->next=newNode(4);head->next->next->next->next=newNode(5);cout<<"Element at index 3 is "<<GetNth(head,3)<<endl;return0;}
C
// C program to find the data at nth node// recursively#include<stdio.h>structNode{intdata;structNode*next;};// Takes head pointer of the linked list and index// as arguments and returns data at index.intGetNth(structNode*head,intindex){// If the list is empty or index is out of boundsif(head==NULL)return-1;// If index equals 1, return node's dataif(index==1)returnhead->data;// Recursively move to the next nodereturnGetNth(head->next,index-1);}structNode*createNode(intnew_data){structNode*new_node=(structNode*)malloc(sizeof(structNode));new_node->data=new_data;new_node->next=NULL;returnnew_node;}intmain(){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5structNode*head=createNode(1);head->next=createNode(2);head->next->next=createNode(3);head->next->next->next=createNode(4);head->next->next->next->next=createNode(5);printf("Element at index 3 is %d\n",GetNth(head,3));return0;}
Java
// Java program to find n'th node in linked list// using recursionimportjava.io.*;classNode{intdata;Nodenext;Node(intx){data=x;next=null;}}classGfG{// Takes head pointer of the linked list and index// as arguments and return data at index*/staticintGetNth(Nodehead,intindex){if(head==null)return-1;// if index equal to 1 return node.dataif(index==1)returnhead.data;// recursively decrease n and increase// head to next pointerreturnGetNth(head.next,index-1);}publicstaticvoidmain(Stringargs[]){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5Nodehead=newNode(1);head.next=newNode(2);head.next.next=newNode(3);head.next.next.next=newNode(4);head.next.next.next.next=newNode(5);System.out.printf("Element at index 3 is %d",GetNth(head,3));}}
Python
# Python program to find the Nth node in# linked list using recursionclassNode:def__init__(self,x):self.data=xself.next=None# Recursive method to find the Nth nodedefget_nth_node(head,index):# Helper function to handle recursion#and count trackingifheadisNone:print(-1)ifindex==1:print(head.data)else:get_nth_node(head.next,index-1)if__name__=="__main__":# Create a linked list: 1 -> 2 -> 3 -> 4 -> 5head=Node(1)head.next=Node(2)head.next.next=Node(3)head.next.next.next=Node(4)head.next.next.next.next=Node(5)print("Element at index 3 is",end=" ")get_nth_node(head,3)
C#
// C# program to find the Nth node in// linked list using recursionusingSystem;classNode{publicintData;publicNodeNext;publicNode(intx){Data=x;Next=null;}}classGfG{// Takes head pointer of the linked list and index// as arguments and returns data at index staticintGetNth(Nodehead,intindex){// Base Conditionif(head==null)return-1;// If n equals 0, return the node's dataif(index==1)returnhead.Data;// Recursively move to the next nodereturnGetNth(head.Next,index-1);}publicstaticvoidMain(){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5Nodehead=newNode(1);head.Next=newNode(2);head.Next.Next=newNode(3);head.Next.Next.Next=newNode(4);head.Next.Next.Next.Next=newNode(5);Console.WriteLine("Element at index 3 is {0}",GetNth(head,3));}}
JavaScript
// JavaScript program to find the n'th node in// a linked list using recursionclassNode{constructor(new_data){this.data=new_data;this.next=null;}}functionGetNth(head,index){// Base case: if the list is empty or index is out of// boundsif(head===null){return-1;}// Base case: if count equals n, return node's dataif(index===1){returnhead.data;}// Recursive case: move to the next node and decrease// indexreturnGetNth(head.next,index-1);}// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5lethead=newNode(1);head.next=newNode(2);head.next.next=newNode(3);head.next.next.next=newNode(4);head.next.next.next.next=newNode(5);console.log("Element at index 3 is",GetNth(head,3));
Output
Element at index 3 is 3
Time Complexity : O(n) ,where n is the nth node of linked list. Auxiliary Space: O(n), for recursive call stack
[Expected Approach-2] Iterative Method - O(n) Time and O(1) Space
The idea is similar to recursive approach to find the value at index node (1- based) .We will use a variable say, count = 1 to track the nodes. Traverse the list until curr != NULL . Increment thecountif count is not equal to index node (1- based) , else if count equals to the index node, return data at current node.
Below is the implementation of above approach :
C++
// C++ program to find n'th// node in linked list (iteratively)#include<iostream>usingnamespacestd;classNode{public:intdata;Node*next;Node(intx){data=x;next=nullptr;}};// Function to find the nth node in the listintGetNth(Node*head,intindex){Node*curr=head;intcount=1;while(curr!=nullptr){if(count==index)returncurr->data;count++;curr=curr->next;}return-1;}intmain(){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5Node*head=newNode(1);head->next=newNode(2);head->next->next=newNode(3);head->next->next->next=newNode(4);head->next->next->next->next=newNode(5);cout<<"Element at index 3 is "<<GetNth(head,3)<<endl;return0;}
C
// C program to find n'th// node in linked list (iteratively)#include<stdio.h>structNode{intdata;structNode*next;};// Function to find the nth node in the listintGetNth(structNode*head,intindex){structNode*curr=head;intcount=1;while(curr!=NULL){if(count==index)returncurr->data;count++;curr=curr->next;}return-1;}structNode*createNode(intnew_data){structNode*new_node=(structNode*)malloc(sizeof(structNode));new_node->data=new_data;new_node->next=NULL;returnnew_node;}intmain(){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5structNode*head=createNode(1);head->next=createNode(2);head->next->next=createNode(3);head->next->next->next=createNode(4);head->next->next->next->next=createNode(5);printf("Element at index 3 is %d\n",GetNth(head,3));}
Java
// Java program to find the Nth node in// a linked list iterativelyclassNode{intdata;Nodenext;Node(intx){data=x;next=null;}}classGfG{// Function to find the nth node in the list iterativelystaticintgetNthNodeIterative(Nodehead,intindex){Nodecurrent=head;intcount=1;// Traverse the list until the end or until the nth// node is reachedwhile(current!=null){if(count==index){returncurrent.data;}count++;current=current.next;}// Return -1 if the index is out of boundsreturn-1;}publicstaticvoidmain(String[]args){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5Nodehead=newNode(1);head.next=newNode(2);head.next.next=newNode(3);head.next.next.next=newNode(4);head.next.next.next.next=newNode(5);intindex=3;intresult=getNthNodeIterative(head,index);if(result!=-1){System.out.println("Element at index "+index+" is "+result);}else{System.out.println("Index "+index+" is out of bounds");}}}
Python
# Python program to find the Nth node in# a linked list iterativelyclassNode:def__init__(self,x):self.data=xself.next=None# Function to find the nth node in the list iterativelydefget_nth_node_iterative(head,n):current=headcount=1# Traverse the list until the end or until the nth node is reachedwhilecurrentisnotNone:ifcount==n:returncurrent.datacount+=1current=current.next# Return -1 if the index is out of boundsreturn-1if__name__=="__main__":# Create a hard-coded linked list:# 1 -> 2 -> 3 -> 4 -> 5head=Node(1)head.next=Node(2)head.next.next=Node(3)head.next.next.next=Node(4)head.next.next.next.next=Node(5)index=3result=get_nth_node_iterative(head,index)ifresult!=-1:print(f"Element at index {index} is {result}")else:print(f"Index {index} is out of bounds")
C#
// Iterative C# program to find the nth node in // a linked listusingSystem;classNode{publicintData;publicNodeNext;publicNode(intx){Data=x;Next=null;}}classGfG{// Given the head of a list and index, find the nth node// and return its datastaticintGetNthNode(Nodehead,intn){Nodecurrent=head;intcount=1;// Traverse the list until the nth node is found or// end of the list is reachedwhile(current!=null){if(count==n){returncurrent.Data;}count++;current=current.Next;}// Return -1 if the index is out of boundsreturn-1;}publicstaticvoidMain(){// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5Nodehead=newNode(1);head.Next=newNode(2);head.Next.Next=newNode(3);head.Next.Next.Next=newNode(4);head.Next.Next.Next.Next=newNode(5);intindex=3;intresult=GetNthNode(head,index);if(result!=-1){Console.WriteLine($"Element at index {index} is {result}");}else{Console.WriteLine($"Index {index} is out of bounds");}}}
JavaScript
// Iterative JavaScript program to find the Nth node in a// linked listclassNode{constructor(x){this.data=x;this.next=null;}}// Given the head of a list and an index, return the data at// the indexfunctiongetNth(head,index){letcurrent=head;letcount=1;// Traverse the linked listwhile(current!==null){if(count===index){// Return data at the current // node if index matchesreturncurrent.data;}count++;current=current.next;}// Return -1 if index is out of boundsreturn-1;}// Create a hard-coded linked list:// 1 -> 2 -> 3 -> 4 -> 5lethead=newNode(1);head.next=newNode(2);head.next.next=newNode(3);head.next.next.next=newNode(4);head.next.next.next.next=newNode(5);letindex=3;letresult=getNth(head,index);if(result!==-1){console.log(`Element at index ${index} is ${result}`);}else{console.log(`Index ${index} is out of bounds`);}
Output
Element at index 3 is 3
Time Complexity : O(n), where n is the nth node of linked list. Auxiliary Space: O(1)
We use cookies to ensure you have the best browsing experience on our website. By using our site, you
acknowledge that you have read and understood our
Cookie Policy &
Privacy Policy
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.