题目描述
输入一个链表,输出该链表中倒数第k个结点。
分析:利用两个指针一前一后,前面指针先走k-1步,使两指针距离为k-1,然后一起再遍历链表,当前面的指针走到尾节点时,后面的结点即为倒数第k个节点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead == nullptr || k == 0)
return nullptr;
ListNode* pAhead = pListHead;
ListNode* pBehind = nullptr;
for(unsigned int i=0; i<k-1; ++i)
{
if(pAhead->next != nullptr)
pAhead = pAhead->next;
else
return nullptr; //防止k大于链表节点数时程序崩溃
}
pBehind = pListHead;
while(pAhead->next != nullptr)
{
pAhead = pAhead->next;
pBehind = pBehind->next;
}
return pBehind;
}
};