题目描述:
输入一个链表,输出该链表中倒数第k个结点。
方法:快慢指针
下面一个题目同样用到了这种方法
链表的中间结点
快指针先走k个结点,之后和慢指针同时移动。当快指针为空时,慢指针就指向倒数第k个结点。
例如k=3,先让fast移动3次
之后再同时移动,slow的指向即为所求
代码:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
// write code here
struct ListNode* slow,*fast;
slow = fast = pListHead;
while(k--)
{
if(fast == NULL)
return NULL;//链表可能没有k步长
fast = fast->next;
}
while(fast)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}