Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
先让fast指针走n步,然后slow从头开始走,并且fast继续向前。当fast走到最后一个时,slow就是要删除的节点。
如果fast走n步后已经出界了,则删除的节点是head。
ListNode *removeNthFromEnd(ListNode *head, int n)
{
int i=0;
ListNode *fast=head;
ListNode *slow=head;
while(i<n)
{
fast = fast->next;
i++;
}
if(fast == NULL)
return head->next;
while(fast->next)
{
fast=fast->next;
slow=slow->next;
}
slow->next=slow->next->next;
return head;
}