题目描述
输入一个链表,输出该链表中倒数第k个结点。
解析:一种变形的快慢指针。
首先将快指针向后移动K步,慢指针在head处不动。
然后让快慢指针同时移动,直到快指针移动到最后一个结点,则慢指针所在位置就是倒数第K个结点。
ListNode* FindKthToTail(ListNode* head, unsigned int k)
{
if (head == NULL || k < 0)
return NULL;
struct ListNode* fast = head;
while (k--)
{
if (fast) //如果给的K大于链表个数时, 就会返回空
fast = fast->next;
else
return NULL;
}
struct ListNode* slow = head;
while (fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}