class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode*dummyhead=new ListNode(0);dummyhead->next=head;ListNode*slow=dummyhead;ListNode*fast=dummyhead;while(n--&&fast!=NULL){fast=fast->next;}fast=fast->next;while(fast!=NULL){fast=fast->next;slow=slow->next;}slow->next=slow->next->next;return dummyhead->next;}
};
创建一个ListNode类型的新指针dummyhead,值为0。dummyhead的指针指向head。创建一个ListNode类型的指针fast,fast指向创建的虚拟头节点dummyhead。创建一个ListNode类型的指针slow,slow指向创建的虚拟头节点dummyhead。如果n不为零并且fast不为空NULL,则进入循环。fast等于fast指向的下一个节点。跳出循环。将fast向后移一位,即fast=fast-next。如果fast不为空NULL,则进入第二个循环。fast向后移,即fast=fast-next。slow向后移,即slow=slow->next。跳出循环。slow的指针指向slow的下一个节点的下一个节点。