思路:定义快慢两个指针,快指针先走k-1步,然后快慢两个指针同时向前,当快指针走到最后一个节点,慢指针此时就在倒数第k个节点。
按照上面的思路,会出现一个特殊情况:当链表长度小于k时,快指针在k-1步之内就会指向NULL,此时应该返回空;
typedef struct{
int data;
LinkNode* next;
}LinkNode;
LinkNode* FindKthToTail(LinkNode* pHead, int k)
{
LinkNode *pFast = pHead;
LinkNode *pSlow = pHead;
if(!pHead || k<1)
{
return NULL;
}
//快指针先走k-1步
while(--k)
{
pFast = pFast->next;
if(!pFast)
{
return NULL;
}
}
//慢指针跟上
while(pFast)
{
pFast = pFast->next;
pSlow = pSlow->next;
}
return pSlow;
}