题目链接:
解题思路:
利用 “ 快慢指针 ” 去进行求解,要求快指针与慢指针在进行对但单链表的遍历时,快指针比慢指针
多走 k 个结点,而当 fast 指针指向尾而不是指向NULL时,此时的慢指针指向题目中要求的倒数第 k 个结点
参考代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param pListHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{
struct ListNode *slow,*fast;
slow = pListHead;
fast = pListHead;
while (k--)
{
if (fast == NULL)//判断所给单链表是否有倒数第 k 个结点
{
return NULL;
}
else
{
fast = fast->next;
}
}
while (fast)//注意这里的判定条件
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
要注意判断所给单链表中是否有倒数第 k 个结点