题目描述
输入一个链表,输出该链表中倒数第k个结点。
示例3
输入3,{1,2,3,4,5}
返回值{3}
思路:
运用快慢指针的思想,快指针先于慢指针k个节点,遍历链表,当快指针为NULL;慢指针指向第(n-k)个节点即倒数第k个节点。如下图所示:
代码实现如下:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{
struct ListNode* prev = pListHead;
struct ListNode* cur = pListHead;
for(int i = 0;i < k; i++)
{
if(cur)
cur = cur -> next;
else
return NULL;
}
while(cur)
{
prev = prev->next;
cur = cur ->next;
}
return prev;
}
注意:快指针在寻找第k个位置时,有可能在循环结束之前为NULL;需要进行判断。