Problem Statement

Given the head of a linked list, remove the nth node from the end of the list and return its head.

Example 1:

Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]

Example 2:

Input: head = [1], n = 1
Output: []

Example 3:

Input: head = [1,2], n = 1
Output: [1]

Constraints:

Problem Link

Remove Nth Node From End of List - LeetCode

Code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        
        ListNode *p1=NULL,*p2=NULL,*temp=head;
        
        while(n--)
        {
            p1 = temp;
            temp = temp->next;
        }
        
        p2 = head;
        ListNode *p3 = NULL;
        while(p1->next)
        {
            
            p3 = p2;    
            p2 = p2->next;
            
            p1 = p1->next;
        }
        
        if(p3)
        p3->next = p2->next;
        else//if first node is to be deleted
            head = head->next;
        return head;
        
        
        
    }
};