查找相交链表相交节点

查找链表相交节点

先判断链表A和B是否有环,并分别找到他们的环入口(loopA,loopB),具体方法可以参考我的上一篇博客判断链表中是否有环,并查找链表环入口

可能有以下几种情况:

	1. (loopA == NULL && loopB == NULL);链表A、B均无环;
	2. ((!loopA && loopB) || (loopA && !loopB));链表A、B中有一个有环,有一个无环,这种情况A、B必定不相交;
	3.  (loopA == loopB && loopA);链表A、B相交于入环前或入环节点
	4. (loopA != loopB && loopA && loopB);链表A、B相交于入环后(不包括入环节点),或不相交

情况1: 无环链表相交

无环链表相交
指针pA指向链表A头节点(A1),pB指向链表B节点(B1),pA,pB均每次前进一步。当pA到达链表A尾部,令pA指向B1;同样,pB到达链表B尾部,令pB指向A1。当pA等于pB时,即为A,B相交节点。

	pA经过的节点为: A1->A2->C1->C2->B1->B2->B3->C1
	pB经过的节点为: B1->B2->B3->C1->C2->A1->A2->C1

将A,B链表中的节点分为3个部分:
1. 链表A独立节点;
2. 链表B的独立节点;
3. 链表A、B的共同部分;
由上可知,pA、pB指针在第二次到达链表A、B链表相交节点时,必定分别遍历一次链表中第1,2,3部分,所以此时pA、pB必定同时到达相交节点(即pA==pB)。

链表没有相交时,可以认为相交于尾节点后一个节点(NULL)。

代码如下:

// 返回链表相交节点,若没有相交返回NULL
// 不考虑链表中存在环路的情况
ListNode *getIntersectionNodeNoLoop(ListNode *headA, ListNode *headB) {
   
    if(!headA 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值