查找特定结点(21.6.3)

题目描述:

有一个带头结点的链表,该链表只给了头指针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;
	}
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值