/*
* 快慢指针
*/
LNode* FindK(LinkList L, int k)
{
if(L == NULL)
return NULL;
LNode* fast = L;
LNode* slow = NULL;
for(int i=0; i<k-1; i++)
{
if(fast->next != NULL)
{
fast = fast->next;
}
else
{
return NULL;
}
}
slow = L;
while(fast->next != NULL)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}
int main()
{
int A[] = {1,3,5,7,9};
LinkList L1;
CreateList_L(L1,A,5);
PrintList(L1);
cout<<"**********"<<endl;
int result = (FindK(L1,2))->data;
printf("%d\n", result);
return 0;
}
需要注意的地方:
1>. 快指针先赋值为头指针,慢指针在快指针后移的k-1个后再赋值为头指针。
2>.快指针后移k-1次,每次判断快指针的后一个是否存在
3>.快指针和慢指针后移时,判断快指针的后一个是否存在。