题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路:
第一种方法 是先遍历一遍链表,数出链表的个数,然后再遍历一遍,倒数第K个 就是正数第length-k+1个。
第二种方法 是用两个指针,P指针先往前走k-1个结点,然后pq两个指针再一起往前走,当p指针指向NULL时,q指针指向倒数第K个结点。
覆盖所有测试用例的情况:
1 头结点为空,返回空
2 给的K<1,返回空
3 链表结点的总个数 小于 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||k<1)
return NULL;
/*
int length=0;
ListNode *p=pListHead;
while(p!=NULL)
{
length++;
p=p->next;
}
p=pListHead;
for(int i=0;i<length-k;++i)
{
p=p->next;
}
return p;*/
ListNode *p=pListHead;
ListNode *q=p;
int i=0;
for(;p!=NULL;++i)//先让指针往后挪k-1个结点
{
p=p->next;
if(i>k-1)
{
q=q->next;
}
}
return i<k?NULL:q;
}
};