题目描述:
有一个带头结点的链表,该链表只给了头指针list,在不改变链表结构的同时,要求找到该链表倒数k个位置上的结点,若查找成功,则输出该节点的data域值,并返回1,若查找失败,则返回0。
算法思路:
可以使用双指针法,设立两个指针p和q,初始时均指向头结点,p指针延链表移动,当其移动到第k个结点时,q指针开始和p指针同步移动,当p指针指向链表的最后一个结点时,此时q指针指向的结点就是倒数第k个结点。
代码如下:
int search( LinkList list,int k){
LNode *p=list->next,*q=list->next; //p和q指针开始均指向第一个结点
int count=0;
while(p!=NULL){ //遍历整个链表结点
if(count<k) count++; //计数,若count<k只移动p
else q=q->next;
p=p->next; //之后让两个指针同步移动
}
if(count<k) return 0;
else{
printf("%d",q->data);
return 1;
}
}