public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if (headA == null || headB == null) {
            return null;
        }

        boolean aFlag = false, bFlag = false;
        ListNode a = headA, b = headB;
        for(;;){
            if(a.val == b.val){
                return a;
            }

            if(a.next == null){
                if(aFlag){
                    return null;
                }
                aFlag = true;
                a = headB;
            }else {
                a = a.next;
            }

            if(b.next == null){
                if(bFlag){
                    return null;
                }
                bFlag = true;
                b = headA;
            }else {
                b = b.next;
            }

        }
    }