思路:声明两个指针,让第一个指针先走k步,然后两个指针同时走,当第一个指针指向的对象为NULL时,则返回第二个指针。这里注意对k值的处理,k有可能大于链表的长度,那么倒数第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(k<=0|pListHead==NULL) return NULL;
ListNode* pp = pListHead;
ListNode* pn = pListHead;
while(pn!=NULL)
{
pn = pn->next;
k--;
if(k==0) break;
}
if(k!=0) return NULL;
while(pn)
{
pn = pn->next;
pp = pp->next;
}
return pp;
}
};