解决思路:遍历一遍,获取链表长度,然后再遍历一遍,找到第len-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(pListHead==NULL)return NULL;
int cnt=0;
ListNode* p=pListHead;
while(p!=NULL)
{
p=p->next;
cnt++;
}
p=pListHead;
for(int i=0;i<cnt-k;i++){
if(p!=NULL)p=p->next;
else return NULL;
}
return p;
}
};
解决思路二:两个指针遍历一遍,这种题目最好纸上画个例子试一下,以免出错
/*
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* p2=p;
for(unsigned int i=0;i<k-1;i++)
if(p->next!=NULL)p=p->next;
else return NULL;
while(p->next!=NULL){
p=p->next;
p2=p2->next;
}
return p2;
}
};