判断两个单向链表是否相交

给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。

首先最容易想到暴力搜寻,对A链的每一个节点,都对B链表进行遍历搜索看是否相同

  public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    ListNode nA= headA;
    while(headA!=null){
        ListNode nB = headB;
        while(nB!=null){
            if(nA==nB){
                return nA;
            }
            nB = nB.next;
        }
    nA= nA.next;

    }
    return null;
    }

这种就不分析了
然后再思考
如果先把A链表遍历一次,节点存到容器中。
遍历B链表时,看B链表节点在不在容器,如果存在,就相交。
这也是一种把办法。


再思考,画图,在这里插入图片描述

分析:单链表,如果相交,之后节点一样

  •  那么A链表头到节点长度a
    
  •  B链表头到节点长度b
    
  •  如果相交一定存在a+b=b+a;
    
  •  所以,当A节点不等于B节点时,一直往后找,A到头切到B,B到头切到A,如果相交,一定会遇到;
    

如果A和B不相交,一定会走到底部,此时nAnull,nBnull,退出循环

 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
		    if(headA==null||headB==null) {
		    	return null;
		    }
		    ListNode nA=headA,nB = headB;
		    while (nA!=nB) {
				nA = nA==null?headB:nA.next;

				nB = nB==null?headA:nB.next;
			}
		    return nA;
	    }

菜鸡学习记录,供后续复习。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值