题目描述:输入一个链表,输出该链表中倒数第k个结点。
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
//本题的主要思想是设置两个指针,两个指针之间的间隔为k-1 当前面的指针已经到尾节点了
//证明随后的指针刚好在k-1的节点处
int i = 0;
if(pListHead == nullptr || k ==0)return nullptr;//假设链表为空 或者长度为0 返回空
ListNode *pAhead = pListHead;
ListNode *pBehind = nullptr;
for(i=0;i<k-1;i++){
//让前面的指针先走k-1步
if(pAhead -> next != nullptr){
pAhead = pAhead -> next;
}
else{
//如果中途遇到空指针则证明没有第k个结点
return nullptr;
}
}
pBehind = pListHead;
while(pAhead->next != nullptr){
//当前面的指针走了k-1步的时候,后面的指针开始移动 直至前面的指针到了尾节点
pAhead = pAhead -> next;
pBehind = pBehind -> next;
}
return pBehind;
}