用两个指针,一前一后。在前的指针先走n步,然后两个指针再一起前进,最后要删除的指针就是后指针的next
class Solution
{
public:
ListNode *removeNthFromEnd(ListNode *head, int n)
{
ListNode dummy(-1);
dummy.next = head;
ListNode *p = &dummy, *q = &dummy;
for (int i = 0; i < n; i++)
q = q->next;
while (q->next != nullptr)
{
p = p->next;
q = q->next;
}
ListNode *temp = p->next;
p->next = p->next->next;
delete temp;
return dummy.next;
}
};