/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
//参考代码随想录
//双指针+虚拟头节点
struct ListNode*dummyHead=(struct ListNode*)malloc(sizeof(struct ListNode));
dummyHead->next=head;
struct ListNode*fast=dummyHead;
struct ListNode*slow=dummyHead;
//要想slow指向倒数第n个结点,需要让fast先走n+1步
while(n--&&fast!=NULL)
{
fast=fast->next;
}
fast=fast->next;
while(fast!=NULL)
{
slow=slow->next;
fast=fast->next;
}
//此时slow指向待删除元素的前一个位置
//接下来要删除该元素
slow->next=slow->next->next;
return dummyHead->next;
}