# Remove Nth node from end of the Linked List

• Difficulty Level : Easy
• Last Updated : 27 Dec, 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

 `// C program to delete nth node from last` `#include` `#include` `// 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 = (``struct` `Node*)``malloc``(``sizeof``(``struct` `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` `struct` `Node* removeNthFromEnd(``struct` `Node* head, ``int` `B)` `{` `    ``// To store length of the linked list` `    ``int` `len = 0;` `    ``struct` `Node* tmp = head;` `    ``while` `(tmp != NULL) {` `        ``len++;` `        ``tmp = tmp->next;` `    ``}`   `    ``// B > length, then we can't remove node` `    ``if` `(B > len)` `    ``{` `        ``printf``( ``"Length of the linked list is  %d"``,len );` `        ``printf``( ``" we can't remove %dth node from the"``,B);` `        ``printf``(``" 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;` `        ``struct` `Node* prev= NULL;` `        ``struct` `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) {` `        ``printf``(``"%d  "``,temp->data);` `        ``temp = temp->next;` `    ``}` `    ``printf``(``"\n"``);` `}`   `// 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;`   `    ``printf``(``"Linked list before modification: \n"``);` `    ``display(head);`   `    ``head = removeNthFromEnd(head, 2);` `    ``printf``(``"Linked list after modification: \n"``);` `    ``display(head);`   `    ``return` `0;` `}`

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