快慢指针法:这里的快指针只是比慢指针先走k步
思路:
- 先定义两个指针fast和slow,起始位置都在链表头部
- 如果链表长度小于k,直接返回nullptr
- 此时快慢指针同时向前走,而他们刚好相差k步,当fast到达链表末尾时,slow刚好到达倒数第k个位置
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode *fast=pListHead,*slow=pListHead;
while(k--)
{
if(fast)
fast=fast->next;
else
return nullptr;
}
while(fast)
{
slow=slow->next;
fast=fast->next;
}
return slow;
}
};