VOOZH about

URL: https://www.geeksforgeeks.org/dsa/nth-node-from-the-end-of-a-linked-list/

⇱ kth from the end of a Linked List - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

kth from the end of a Linked List

Last Updated : 22 Mar, 2026

Given a Linked List and a number k, find the value at the kth node from the end of the Linked List. If there is no Nth node from the end, print -1.

Examples:

Input: head=1 -> 2 -> 3 -> 4, k= 3
Output: 2
Explanation: Node 2 is the third node from the end of the linked list.

Input: head=35 -> 15 -> 4 -> 20, k = 5
Output: -1
Explanation: length of linked list is less then k so -1.

[Naive Approach] Length-Based Traversal - O(n) Time and O(1) Space

The idea is to count the number of nodes in linked list in the first pass, say len. In the second pass, return the (len - k + 1)th nodes from beginning of the Linked List.


Output
35

Time complexity: O(n) where n is number of nodes in the linked list
Auxiliary Space: O(1)

[Expected Approach] Using Two Pointers(Slow and fast) - One Pass - O(n) Time and O(1) Space

The idea is to maintain two pointers, say main_ptr and ref_ptr point to the head of Linked List and move ref_ptr to the Nth node from the head to ensure that the distance between main_ptr and ref_ptr is (k - 1). Now, move both the pointers simultaneously until ref_ptr reaches the last node. Since the distance between main_ptr and ref_ptr is (k - 1), so when ref_ptr will reach the last node, main_ptr will reach kth node from the end of Linked List. Return the value of node pointed by main_ptr.

Below image is a dry run of the above approach:


Follow the given steps to solve the problem:

  • Maintain two pointers main_ptr and ref_ptr
  • Move ref_ptr to the kth node from the start
  • Now move both main_ptr and ref_ptr, until the ref_ptr reaches the last node
  • Now return the data of the main_ptr, as it is at the kth node from the end

Output
35

Time Complexity: O(n) where n is number of nodes the linked list
Auxiliary Space: O(1)

Comment