struct ListNode *getIntersectionNode(struct ListNode *headA,
                                     struct ListNode *headB)
{
    struct ListNode *cur1 = headA, *cur2 = headB;
    if (cur1 == NULL || cur2 == NULL)
        return NULL;
    while (cur1 && cur2 && cur1 != cur2)
    {
        cur1 = cur1->next;
        cur2 = cur2->next;
        if (cur1 == cur2)
            return cur1;
        if (!cur1)
            cur1 = headB;
        if (!cur2)
            cur2 = headA;
    }
    return cur1;
}

160