/*
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(pListHead == NULL || k == 0)
return NULL;
ListNode* p = pListHead;
ListNode* q = pListHead;
for(int i = 0; i < k-1; i++){
if(p->next != NULL)
p = p->next;
else
return NULL;
}
while(p->next != NULL){
p = p->next;
q = q->next;
}
return q;
}
};
好吧,其实我觉得这里说的比较模糊,题目也不告诉你到底带不带头结点,按照答案来看的话,这里是没有的。
这里我们采取的是使用两个指针中间间隔k-2个节点的方法。这样当后一个指针到达末尾时,前一个指针就到达了倒数第K个节点。