LintCode : 删除链表中倒数第n个节点
题目
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
样例
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
思路
链表中一共num个节点,我们从头结点开始遍历设置p,cur两个指针。当p走了n+1步时,cur开始走,也就是最后cur走了num - n - 1步,当cur停止时,距终点n + 1步,也就是我们要求的。
代码
ListNode *removeNthFromEnd(ListNode *head, int n)
{
int num = 0;
ListNode *cur = head;
for(ListNode *p = head; p != NULL; p = p->next, num++)
{
if(num > n)
cur = cur->next;
}
if(n == num)
{
head = head->next;
return head;
}
ListNode *q = cur->next;
cur->next = q->next;
free(q);
return head;
}