1. 题目描述
2. 思路分析
快慢指针法 (如果有小伙伴不了解快慢指针法,可以看看这篇文章:https://blog.csdn.net/m0_62531913/article/details/132309395?spm=1001.2014.3001.5502)
定义快慢指针fast和slow。首先让fast先走k步,然后fast和slow同时走,fast走到末尾时,slow就走到倒数第k个节点。最后我们返回slow即可。
这题需要注意的是,k有可能大于链表长度,遇到这种情况,我们直接返回空指针NULL。
3. 代码实现
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param pListHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode *slow=pListHead,*fast=pListHead;
while(k--)
{
//链表没有k步长,倒数就算是空
if(fast==NULL)
return NULL;
else
fast=fast->next;
}
while(fast)
{
slow=slow->next;
fast=fast->next;
}
return slow;
}