/*
    一、比较容易理解的方法
        分别把两条链走完,计算两条链的长度,差值就是一条链比另外一条链的长的长度;
        然后将将较长的链先走到剩下的和另一条一样长时,两条链开始同步一起走,相等处即为相交的起点,若走到空没有,则说明没有交点。
    二、用哈希表存存储一条链
        遍历另一条链,在哈希表中找到的第一个结点即为交点的开始,若哈希表中没有任何一个结点,则没有交点。
    三、双向指针
        因为两条链之和相等,所以当从起点开始,走完后到另外一条链的起点开始,那么当走到相同结点时,则为相交的起点。 
*/
// 这里是最佳方案 
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    if(headA == NULL || headB == NULL) return NULL;
    struct ListNode *pa = headA;
    struct ListNode *pb = headB;
    while(pa != pb)
    {
        if(pa == NULL) pa = headB;
        if(pb == NULL) pb = headA;
        pa = pa->next;
        pb = pb->next;
    }
    return headA;
}