题目描述:
输入一个链表,输出该链表中倒数第k个结点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
思路分析:
1.创建快慢指针,先让快指针走K步,慢指针在和快指针一起走
2.当快指针走到NULL的时候,慢指针对应的位置就是倒数第K个节点的位置
3.注意极端情况:
1.当链表为空的时候,返回NULL
2.当K的大小超过链表长度的时候返回NULL
代码实现:
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==NULL)
{
return pListHead;
}
ListNode* pCur=NULL;
ListNode* pPre=NULL;
pCur=pListHead;
pPre=pListHead;
while(k>0&&pCur!=NULL)
{
k--;
pCur=pCur->next;
}
if(pCur==NULL&&k>0)
{
return NULL;
}
while(pCur!=NULL)
{
pCur=pCur->next;
pPre=pPre->next;
}
return pPre;
}
};