classSolution { public: ListNode *removeNthFromEnd(ListNode *head, int n) { //Two pointers, when l starts from head, r starts from head+n ListNode *l = head; ListNode *r = head; ListNode *p;
for (int i = 0; i < n; i++) { r = r->next; } if (r == nullptr) { // n == sz p = head;
head = head->next; delete p; return head; }
while (r->next != nullptr) { r = r->next; l = l->next; } p = l->next; l->next = p->next; delete p; return head; } };