想象一下两个人走相同的路程使用相同的速度,那么是不是就是同时到达终点?利用这个原理,结合到该题。
两个链表无非一长一短或者是两个一样长,单链表的长度对应着路程的一部分,所以无需再分辨两个链表的哪个长哪个短,确定的是这里要定义两个引用来遍历两个单链表。使用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;
}`