题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:
一个指针先提前走k-1步,然后两个指针同时走,当快指针走到最后一个节点时,慢指针就在倒数第k个节点。
这道题的关键是要考虑到节点数小于k个的情况,当快指针先走的期间,如果指针为NULL,说明节点数量小于k个
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==NULL || k<1)
{
return NULL;
}
ListNode* pFront = pListHead;
ListNode* pLast = pListHead;
while(--k && pFront)
{
pFront = pFront->next;
}
if(!pFront)
{
return NULL;
}
while(pFront->next)
{
pFront = pFront->next;
pLast = pLast->next;
}
return pLast;
}
};