解题思路:利用前后两个指针。
1、先让前指针走k步,设全场L,那么就剩余L-K步;
2、前后两个指针同时走,当前指针走到链表尾,就停止,这时后指针所在的位置就是倒数第K个节点;
因为后指针走了L-K步,还剩(L-(L-K)=K)步就到链表结尾。
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if( pListHead==NULL||k<=0 )
return NULL;
ListNode* prev=pListHead;
ListNode* back=pListHead;
int num=k;
int count=0;
//走k步
while(num&&prev)
{
prev=prev->next;
num--;
count++;
}
while(prev)
{
prev=prev->next;
back=back->next;
count++;
}
if(count<k) //k>链表的长度
return NULL;
else
return back;
}
};