18. Remove Nth Node From End of List

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]

Solution: (Removing {length - nth} node from first)

class Solution
{
public:
    ListNode *removeNthFromEnd(ListNode *head, int n)
    {

        int s = 0;
        ListNode *temp = head;

        while (temp != NULL)
        {
            s = s + 1;
            temp = temp->next;
        }

        ListNode *p = head;
        ListNode *q = NULL;
        int index = s - n;

        int i = 0;

        if (index == 0)
        {
            p = p->next;
            head = p;
        }
        else
        {
            while (i < index)
            {
                q = p;
                p = p->next;
                i++;
            }
            q->next = p->next;
        }

        return head;
    }
};

Time Complexity: O(n)

Last updated