定义两个指针start和end,让start先走k步(在走的过程中,需要判断start是否指向NULL,指向的话说明链表长度小于k,直接返回NULL),然后再判断当前start是否指向NULL,指向的话说明量表长度等于k,直接返回end,否则令它们同时往后移动,当start到达链表末尾时,end所指即为链表中倒数第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) {
ListNode* start = pListHead;
ListNode* end = pListHead;
if(k == 0) return NULL;
while(k != 0 and start!= NULL){
start = start->next;
--k;
}
if(k > 0) return NULL;
while(start != NULL){
start = start->next;
end = end->next;
}
return end;
}
};