两个链表的第一个公共节点

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;
        
    }
    
}