给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
ListNode* fast = head;
ListNode* slow = head;
ListNode* prev = NULL;
while(n--)
{
if(fast)
{
fast = fast -> next;
}
else
{
return head;
}
}
while(fast)
{
prev = slow;
slow = slow -> next;
fast = fast -> next;
}
if(prev == NULL)
{
head = slow -> next;
}
else
{
prev -> next = slow -> next;
}
free(slow);
return head;
}