先找到第k个节点,假设为p。然后让q节点从头节点开始,p节点也同步next,当p节点到达末尾时,q节点也就到达了第n-k个节点,即倒数第k个节点,省去了求节点总数n的步骤,代码如下
/*
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* p=pListHead;
ListNode* q=pListHead;
int i=0;
for(;i<k&&p!=NULL;i++){
p=p->next;
}
if(p==NULL&&i<k){
return NULL;
}
while(p!=NULL){
q=q->next;
p=p->next;
}
return q;
}
};