算法题——单链表判断两个单链表是否有交点

	想象一下两个人走相同的路程使用相同的速度,那么是不是就是同时到达终点?利用这个原理,结合到该题。
	两个链表无非一长一短或者是两个一样长,单链表的长度对应着路程的一部分,所以无需再分辨两个链表的哪个长哪个短,确定的是这里要定义两个引用来遍历两个单链表。使用pA,pB分别代表两个链表的表头(无所谓长短)。让其向后一人一步的走下去。假如pA走到了null那么pA从另一个表头开始遍历,pB走到了null,也从另一个表头进行遍历。这样一来,pA与pB走的路程就是一样的了,其速度都是一人一步。所以只要有交点那么必会是同时到达那个交点,并且一起走完两个链表长度的路程。如果链表不相交那么一人一步走完各自的链表。再交换走到另一个链表的时候最后同时是null。
	代码示例:
	`public static ListNode getIntersectionNode1(ListNode headA,ListNode headB){
    	ListNode pA = headA;
    	ListNode pB = headB;
    	if (headA == null || headB == null){
        return null;
    	}
    	while (pA != pB){
        pA = pA == null ?  headB : pA.next;
        pB = pB == null ?  headA : pB.next;
    	}
 	   return pA;
		}`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值