单链表相交问题

问题:

1.单链表如何判断是否相交?

2.单链表相交点的地址如何求出?

解决:

先来说一下单链表相交的样式图是图一样子的还是图二样子的

 是图二样子的,因为图一样子那个相交点的next域会有两个指向,所以只能是第二中样子的

1.判断两个单链表相交

思路:

 思路有了,代码实现如下:

bool Intersect(PNode plist1, PNode plist2)
{
	//assert
	Node *p = plist1;
	Node *q = plist2;
	for(p; p->next!=NULL; p=p->next); //此时p一定在plist1的尾结点
	for(q; q->next!=NULL; q=q->next); //此时q一定在plist2的尾结点
	return p==q ? true : false;
	/*if(p == q)
	{
		return true;
	}
	return false;*/
}

上述三目运算那块可以用下面的if替代,没有任何区别!

2.单链表相交的首地址

思路:

 思路有了  代码实现:

Node* Intersect_get_first(PNode plist1, PNode plist2)
{
	//assert
	int len1 = Get_Length(plist1);  //自定义求单链表长度的函数
	int len2 = Get_Length(plist2);

	Node *p = len1>=len2 ? plist1 : plist2;   //三目运算求两条链表中长短链表进行赋值
	Node *q = len1>=len2 ? plist2 : plist1;

	for(int i=0; i<abs(len1-len2); i++)  //abs是求绝对值的一个函数,这里就是为了保证为正数
	{
		p = p->next;  //长链走了先走比短链多出来的那部分
	}

	while(p != NULL)
	{
		if(p == q)
		{
			return p;//return q;
		}
		p=p->next;   //p,q同时开始走,直至相遇return 相遇点
		q=q->next; 
	}

	return NULL;
}
//函数返回值要Node*的原因是这个返回的类型是一个Node类型的指针,所以拿Node*来接收

总结一下,兄弟们,链表相交在面试的时候会考(老师说的),还是值得多研究一下!希望这篇文章对大家有一定的帮助!

哪有什么岁月静好,只不过有人再替我们负重前行,加油吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值