前言:内容包括-题目,代码实现,解题思路,代码解读
题目:
描述
输入一个链表,输出该链表中倒数第k个结点。
示例1
输入:
1,{1,2,3,4,5}
返回值:
{5}
代码实现:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{
struct ListNode* slow = pListHead;
struct ListNode* fast = pListHead;
//fast与slow隔开k步
while (k--)
{
if (fast == NULL)
{
return NULL;
}
fast = fast->next;
}
//slow和fast同时走
while (fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
解题思路:
快慢指针:
1 slow指针和fast指针先隔开k步
2 slow指针和fast指针同时走,当fast走到空,slow指针的就是倒数第k个节点
以示例1为例:
找倒数第1个节点:5
代码解读:
struct ListNode* slow = pListHead;
struct ListNode* fast = pListHead;
//fast与slow隔开k步
while (k--)
{
if (fast == NULL)//存在k>元素个数的情况,则这种情况是不可能找到的,即fast在走的过程中会遍历完所有节点后,k仍未变成0,此时fast已经变成NULL,就不能再走了
{
return NULL;
}
fast = fast->next;
}