只遍历一次链表,即可查询到倒数第K个结点——快慢指针。
第一个指针从链表的头指针开始遍历向前走K-1步,第二个指针不动。从第K步开始,第二个指针从头指针开始遍历,第一个指针从第K-1个结点开始遍历。当第一个指针到达尾结点时,则第二个指针正好指向倒数第K个结点。(两个指针相差K步)
//创建两个指针
ListNode *FindKthToTail(ListNode *pHead,unsigned int k)
{
//检验输入是否符合要求
if(pHead==NULL||k==0)
return NULL;
ListNode *fast=pHead;
ListNode *slow=pHead;
for(unsigned int i=0;i<k-1;++i)
{
//检测输入K值是否大于链表长度
if(fast->m_pNext!=NULL)
fast=fast->m_pNext;
else
{
return NULL;
}
}
while(fast->m_pNext!=NULL)
{
fast=fast->m_pNext;
slow=slow->m_pNext;
}
return slow;
}