注:本题为2009年全国硕士生考研真题
算法基本思想:定义两个指针变量p和q,初始时均指向头结点的下一个结点(链表的第一个结点),p指针沿链表移动;当p指针移动到第k个结点时,q指针开始与p指针同步移动;当p指针移动到最后一个结点时,q指针所指向结点为倒数第k个结点,以上过程对链表仅进行一遍扫描。
int Search_k(LinkList L, int k)
{
LinkList p=L->next;
LinkList q=L->next; //指针p、q指向第一个结点
int count=0;
while(p!=NULL) //遍历链表直到最后一个结点
{
if(count<k)
count++; //如果count<k则只移动p
else
q=q->next; //之后让p、q同步移动
p=p->next;
}
if(count<k)
return 0; //查找失败返回0
else{
printf("%d",q->data);
return 1; //否则打印并返回1
}
}