class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n)
{
ListNode* dummy = new ListNode(-1);
dummy->next = head;
ListNode* x = findNthFromEnd(dummy, n + 1);
x->next = x->next->next;
return dummy->next;
}
ListNode* findNthFromEnd(ListNode* head, int n)
{
ListNode *p1 = head;
for (int i = 0; i < n; i++)
p1 = p1->next;
ListNode *p2 = head;
while (p1 != NULL)
{
p1 = p1->next;
p2 = p2->next;
}
return p2;
}
};