找相同元素(21.5.30)

题目描述:

给出两个单链表,找出它们的共同结点。

算法思路:

两个单链表有公共结点,即两个链表从某一个结点开始,他们的next都指向同一个结点。由于每个单链表结点只有一个next域,因此从第一个公共结点开始,之后它们所有的结点都是重合的,不可能出现分叉,则其拓扑结构类似于Y。

可以先遍历两个链表分别得到它们的长度,并求出两个的长度之差。在长的链表上先遍历长度差个结点之后,再同步遍历两个链表,直到找到它们的相同结点,或者一直到链表结束。

代码如下:

LinkList Search_Commom(LinkList L1, LinkList L2){
	int len1=Length(L1),len2=Length(L2);
	LinkList longList, shortList;
	if(len1>len2){
		longList=L1->next;
		shortList=L2->next;
		dist= len1-len2;
	}
	else{
		longList=L2->next;
		shortList=L1->next;
		dist= len2-len1;
	}
	while(dist--) //表长的链表先遍历第dist个结点,然后同步
		longList = longList->next;
	while(longList!=NULL){  //同步寻找共同的结点
		if(longList == shortList)
			return longList;
		else{
			longList=longList->next;
			shortList=shortList->next;
		}
	}
	return NULL;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值