题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:
定义两个指针:一个pPre,一个pCur,让pPre先走k-1步(这里用for循环来实现pCur不动。当从第k步开始,让两个指针再同时出发(这样两个指针之间的距离始终就是k-1),当pPre走到尾指针时,pCur 刚好走到倒数第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(NULL == pListHead || k <= 0)
return NULL;
ListNode* pPre = pListHead;
ListNode* pCur = NULL;
// 让PPre先走k-1步
for(int i = 0; i < k - 1; i++)
{
if(NULL != pPre->next)
pPre = pPre->next;
else
return NULL;
}
// 让pCur开始于pListHead处,然后让两个指针同时开始走
pCur = pListHead;
while(NULL != pPre->next)
{
pCur = pCur->next;
pPre = pPre->next;
}
return pCur;
}
};