题目:
输入一个链表,输出该链表中倒数第k个结点。
分析:
也是用两个指针来实现先让first指针从头开始先走k步,然后second指针从头开始走,这时让两个指针一起走,当first走到尾时,second就走到倒数第k个节点。需要注意是frist先走k步时,有可能k大于
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==nullptr)
return pListHead;
ListNode* first=pListHead;
ListNode* second=pListHead;
//first先走k步
while(first)
{
first=first->next;
k--;
if(k==0)
break;
}
if(k>0 && first==nullptr)//当链表走完了k还没走完则输出空(即k大于链表节点个数)
return nullptr;
//两人开始一起走
while(first)
{
first=first->next;
second=second->next;
}
//来到这说明second走到倒数第k个节点了
return second;
}