本题目可以通过两个指针,只对链表遍历一遍,既可以得到倒数第K个结点。
第一个指针领先第二个指针K步。
但是一定要注意代码的鲁棒性。比如,头节点即为NULL,比如K<=0,比如结点总数小于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) {
ListNode *pre,*p;
pre=p=pListHead;
int i=1;
if(k<=0)
return NULL;
while (p!=NULL && i<k)
{
i++;
p=p->next;
}
if(NULL==p)
return NULL;
p=p->next;
while(p!=NULL)
{
p=p->next;
pre=pre->next;
}
return pre;
}
};