链表的中倒数第k个节点
题目要求
输入一个链表,输出该链表中倒数第k个结点。
示例1:
输入:1,[1,2,3,4,5]
输出:[5]
思路
如果这是一个空链表或者倒数的节点小于等于0,那么返回值应该为空。然后,我们设置fast和slow两个指针,为了使两个指针之间的距离为k-1,我们先将a结点找到对应位置,如果还没找到a的位置链表就结束了,那么返回空,然后只要判断a->next != NULL,也就是a不是最后一个结点,那么a向前一步,b向前一步,直到a为最后一个结点。
图解
代码实现
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k) {
struct ListNode* fast = pListHead;
struct ListNode* slow = pListHead;
if (pListHead == NULL || k <= 0)
{
return NULL;
}
while (k > 1)
{
if (fast->next == NULL)
{
return NULL;
}
fast = fast->next;
k--;
}
while (fast->next != NULL)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}