输入一个链表,输出该链表中倒数第k个结点(来自牛客网)
解题思路:可以借助快慢指针的思想,定义两个指针,把两个指针都放在头结点的位置,让快指针先走k步停下来,然后接下来,让两个指针同时从他们的当前位置(此时,慢指针在头结点的位置,快指针在距头结点K步的位置),一步步向后走,当快指针走完的时候,此时,慢指针刚好指向链表中倒数第K个结点。(记得考虑特殊情况噢!)
根据这个思路,就知道如何写代码了,嘻嘻
定义一个链表的结构体:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode*fast=pListHead;
ListNode*low=pListHead;
if(pListHead==NULL||k==0)
{
return NULL;
}
while(k--)
{
if(fast)
fast=fast->next;
else
return NULL;
}
while(fast)
{
fast=fast->next;
low=low->next;
}
return low;
}
运行结果: