package JianZhioffer;
//当count=2时,实际上保证了双链表指针最后同时到达终点。但是如果到达终点都没有指到同一个结点,说明并没有相交结点。此时R与L都再次指向另外一个链表后count = 4,所以回返回null。
//当指针按照题解方式走下去,p1第二次走到公共节点的时候,走过的长度为LA + C + LB,p2第二次走到公共节点的时候,走过的长度为LB + C + LA。p1 p2走过的长度相等,p1 p2 相遇。
//输入两个链表,找出它们的第一个公共节点。
public class test52 {
public static void main(String[] args) {
ListNode l1=new ListNode(4);
l1.next=new ListNode(1);
l1.next.next=new ListNode(8);
l1.next.next.next=new ListNode(4);
l1.next.next.next.next=new ListNode(5);
ListNode l2=new ListNode(5);
l2.next=new ListNode(0);
l2.next.next=new ListNode(1);
l2.next.next.next=new ListNode(8);
l2.next.next.next.next=new ListNode(4);
l2.next.next.next.next.next=new ListNode(5);
ListNode result=getIntersectionNode(l1, l2);
int x=0;
}
public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) return null;
ListNode L = headA;
ListNode R = headB;
int count=0; //当一个节点达到一个链表的尾部,则从另一个链表继续,同时count++
while (L != R) {
L = L.next;
R = R.next;
if (L == null) {
L = headB;
count ++;
}
if (R == null) {
R = headA;
count++;
}
if (count >2) {
return null;
}
}
return L;
}
}