1.思路:
定义一个start和end指针,使其之间相差k个结点,令它们同时往后移动,当end到达链表末尾时,start所指即为链表中倒数第k个结点。需要注意的是要讨论链表是否存在倒数第k个结点,即链表长度是否大于k,若不存在,应及时停止并返回NULL。
2.代码:
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) && (end != NULL)) {
end = end->next;
--k;
}
if(k > 0) return NULL;
while(end != NULL) {
start = start->next;
end = end->next;
}
return start;
}
};