Skip to content
Related Articles
Remove Nth node from end of the Linked List
• Difficulty Level : Easy
• Last Updated : 03 Jun, 2021

Given a linked list. The task is to remove the Nth node from the end of the linked list.

Examples:

Input : 1->2->3->4->5 , N = 2
Output : 1->2->3->5

Input : 7->8->4->3->2 , N = 1
Output : 7->8->4->3

Prerequisites:
1. Delete a node from the linked list.
2. Find the nth node from the end of the linked list
Approach:
Deleting the Bth node from last is basically the same as deleting (length-B+1) from the start. In our approach, first, we evaluate the length of the linked list, then check

• If length < B, then we can’t remove the node
• If length = B, then return head->next
• If length > B, then it means we have to delete the intermediate node, we will delete this node and make its prev node point to the next node of the deleted node.

## C++

 `// CPP program to delete nth node from last``#include ``using` `namespace` `std;` `// Structure of node``struct` `Node {``    ``int` `data;``    ``struct` `Node* next;``};` `// Function to insert node in a linked list``struct` `Node* create(``struct` `Node* head, ``int` `x)``{``    ``struct` `Node *temp, *ptr = head;``    ``temp = ``new` `Node();``    ``temp->data = x;``    ``temp->next = NULL;``    ``if` `(head == NULL)``        ``head = temp;``    ``else` `{``        ``while` `(ptr->next != NULL) {``            ``ptr = ptr->next;``        ``}``        ``ptr->next = temp;``    ``}``    ``return` `head;``}` `// Function to remove nth node from last``Node* removeNthFromEnd(Node* head, ``int` `B)``{``    ``// To store length of the linked list``    ``int` `len = 0;``    ``Node* tmp = head;``    ``while` `(tmp != NULL) {``        ``len++;``        ``tmp = tmp->next;``    ``}``    ` `    ``// B > length, then we can't remove node``    ``if` `(B > len)``    ``{``        ``cout << ``"Length of the linked list is "` `<< len;``        ``cout  << ``" we can't remove "``<< B << ``"th node from the"``;``        ``cout << ``" linked list\n"``;``        ``return` `head;``    ``}``    ` `    ``// We need to remove head node``    ``else` `if` `(B == len) {``        ` `        ``// Return head->next``        ``return` `head->next;``        ` `    ``}``    ``else``    ``{``        ``// Remove len - B th node from starting``        ``int` `diff = len - B;         ``        ``Node* prev= NULL;      ``        ``Node* curr = head;        ``        ``for``(``int` `i = 0;i < diff;i++){``            ``prev = curr;           ``            ``curr = curr->next;     ``        ``}``        ``prev->next = curr->next;``        ``return` `head;``    ``}``    ` `}` `// This function prints contents of linked``// list starting from the given node``void` `display(``struct` `Node* head)``{` `    ``struct` `Node* temp = head;``    ``while` `(temp != NULL) {``        ``cout << temp->data << ``" "``;``        ``temp = temp->next;``    ``}``    ``cout << endl;``}` `// Driver code``int` `main()``{``    ``struct` `Node* head = NULL;``    ` `    ` `    ``head = create(head, 1);``    ``head = create(head, 2);``    ``head = create(head, 3);``    ``head = create(head, 4);``    ``head = create(head, 5);``    ` `    ``int` `n = 2;``    ` `    ``cout << ``"Linked list before modification: \n"``;``    ``display(head);` `    ``head = removeNthFromEnd(head, 2);``    ``cout << ``"Linked list after modification: \n"``;``    ``display(head);` `    ``return` `0;``}`

## Java

 `// Java program to delete nth node from last``class` `GFG``{` `// Structure of node``static` `class` `Node``{``    ``int` `data;``    ``Node next;``};` `// Function to insert node in a linked list``static` `Node create(Node head, ``int` `x)``{``    ``Node temp, ptr = head;``    ``temp = ``new` `Node();``    ``temp.data = x;``    ``temp.next = ``null``;``    ``if` `(head == ``null``)``        ``head = temp;``    ``else``    ``{``        ``while` `(ptr.next != ``null``)``        ``{``            ``ptr = ptr.next;``        ``}``        ``ptr.next = temp;``    ``}``    ``return` `head;``}` `// Function to remove nth node from last``static` `Node removeNthFromEnd(Node head, ``int` `B)``{``    ``// To store length of the linked list``    ``int` `len = ``0``;``    ``Node tmp = head;``    ``while` `(tmp != ``null``)``    ``{``        ``len++;``        ``tmp = tmp.next;``    ``}``    ` `    ``// B > length, then we can't remove node``    ``if` `(B > len)``    ``{``        ``System.out.print(``"Length of the linked list is "` `+ len);``        ``System.out.print(``" we can't remove "``+ B +``                         ``"th node from the"``);``        ``System.out.print(``" linked list\n"``);``        ``return` `head;``    ``}``    ` `    ``// We need to remove head node``    ``else` `if` `(B == len)``    ``{``        ` `        ``// Return head.next``        ``return` `head.next;``        ` `    ``}``    ``else``    ``{``        ``// Remove len - B th node from starting``        ``int` `diff = len - B;        ``        ``Node prev= ``null``;    ``        ``Node curr = head;        ``        ``for``(``int` `i = ``0``; i < diff; i++)``        ``{``            ``prev = curr;        ``            ``curr = curr.next;    ``        ``}``        ``prev.next = curr.next;``        ``return` `head;``    ``}``    ` `}` `// This function prints contents of linked``// list starting from the given node``static` `void` `display(Node head)``{``    ``Node temp = head;``    ``while` `(temp != ``null``)``    ``{``        ``System.out.print(temp.data + ``" "``);``        ``temp = temp.next;``    ``}``    ``System.out.println();``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``Node head = ``null``;``    ` `    ``head = create(head, ``1``);``    ``head = create(head, ``2``);``    ``head = create(head, ``3``);``    ``head = create(head, ``4``);``    ``head = create(head, ``5``);``    ` `    ``int` `n = ``2``;``    ` `    ``System.out.print(``"Linked list before modification: \n"``);``    ``display(head);` `    ``head = removeNthFromEnd(head, ``2``);``    ``System.out.print(``"Linked list after modification: \n"``);``    ``display(head);``}``}` `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 program to delete nth node from last``class` `Node:` `    ``# Function to initialise the node object``    ``def` `__init__(``self``, data):``        ``self``.data ``=` `data ``# Assign data``        ``self``.``next` `=` `None` `# Initialize next as null` `class` `LinkedList:` `    ``# Function to initialize head``    ``def` `__init__(``self``):``        ``self``.head ``=` `None` `    ``# Function to add node at the end``    ``def` `create(``self``, x):` `        ``new_node ``=` `Node(x)` `        ``if` `self``.head ``is` `None``:``            ``self``.head ``=` `new_node``            ``return` `        ``last ``=` `self``.head``        ``while` `last.``next``:``            ``last ``=` `last.``next` `        ``last.``next` `=` `new_node` `    ``# This function prints contents of linked``    ``# list starting from the given node``    ``def` `display(``self``):``        ``temp ``=` `self``.head` `        ``while` `temp:``            ``print``(temp.data, end ``=` `" "``)``            ``temp ``=` `temp.``next` `# Function to remove nth node from last``def` `removeNthFromEnd(head, k):``    ` `    ``# the function uses two pointer method``    ``first ``=` `head``    ``second ``=` `head``    ``count ``=` `1``    ``while` `count <``=` `k:``        ``second ``=` `second.``next``        ``count ``+``=` `1``    ``if` `second ``is` `None``:``        ``head.value ``=` `head.``next``.value``        ``head.``next` `=` `head.``next``.``next``        ``return``    ``while` `second.``next` `is` `not` `None``:``        ``first ``=` `first.``next``        ``second ``=` `second.``next``    ``first.``next` `=` `first.``next``.``next` `# Driver code` `# val list contains list of values``val ``=` `[``1``, ``2``, ``3``, ``4``, ``5``]``k ``=` `2``ll ``=` `LinkedList()``for` `i ``in` `val:``    ``ll.create(i)` `print``(``"Linked list before modification:"``);``ll.display()` `removeNthFromEnd(ll.head, k)` `print``(``"\nLinked list after modification:"``);``ll.display()` `# This code is contributed by Dhinesh`

## C#

 `// C# program to delete nth node from last``using` `System;``    ` `class` `GFG``{` `// Structure of node``class` `Node``{``    ``public` `int` `data;``    ``public` `Node next;``};` `// Function to insert node in a linked list``static` `Node create(Node head, ``int` `x)``{``    ``Node temp, ptr = head;``    ``temp = ``new` `Node();``    ``temp.data = x;``    ``temp.next = ``null``;``    ``if` `(head == ``null``)``        ``head = temp;``    ``else``    ``{``        ``while` `(ptr.next != ``null``)``        ``{``            ``ptr = ptr.next;``        ``}``        ``ptr.next = temp;``    ``}``    ``return` `head;``}` `// Function to remove nth node from last``static` `Node removeNthFromEnd(Node head, ``int` `B)``{``    ``// To store length of the linked list``    ``int` `len = 0;``    ``Node tmp = head;``    ``while` `(tmp != ``null``)``    ``{``        ``len++;``        ``tmp = tmp.next;``    ``}``    ` `    ``// B > length, then we can't remove node``    ``if` `(B > len)``    ``{``        ``Console.Write(``"Length of the linked list is "` `+ len);``        ``Console.Write(``" we can't remove "` `+ B +``                           ``"th node from the"``);``        ``Console.Write(``" linked list\n"``);``        ``return` `head;``    ``}``    ` `    ``// We need to remove head node``    ``else` `if` `(B == len)``    ``{``        ` `        ``// Return head.next``        ``return` `head.next;``        ` `    ``}``    ``else``    ``{``        ``// Remove len - B th node from starting``        ``int` `diff = len - B;        ``        ``Node prev= ``null``;    ``        ``Node curr = head;        ``        ``for``(``int` `i = 0; i < diff; i++)``        ``{``            ``prev = curr;        ``            ``curr = curr.next;    ``        ``}``        ``prev.next = curr.next;``        ``return` `head;``    ``}``    ` `}` `// This function prints contents of linked``// list starting from the given node``static` `void` `display(Node head)``{``    ``Node temp = head;``    ``while` `(temp != ``null``)``    ``{``        ``Console.Write(temp.data + ``" "``);``        ``temp = temp.next;``    ``}``    ``Console.Write(``"\n"``);``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``Node head = ``null``;``    ` `    ``head = create(head, 1);``    ``head = create(head, 2);``    ``head = create(head, 3);``    ``head = create(head, 4);``    ``head = create(head, 5);``    ` `    ``Console.Write(``"Linked list before modification: \n"``);``    ``display(head);` `    ``head = removeNthFromEnd(head, 2);``    ``Console.Write(``"Linked list after modification: \n"``);``    ``display(head);``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output:

```Linked list before modification:
1 2 3 4 5
Linked list after modification:
1 2 3 5 ```

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up