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

输入两个链表,找出它们的第一个公共节点。

思路一:

先统计两个链表的长度,比如l1长度为10,l2长度为6。然后l1先走4步,l1和l2再同时出发,如果l1等于l2则找到公共节点。

代码:

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if(headA == nullptr || headB == nullptr) return nullptr;
        int a = 0,b = 0;
        ListNode* aTmp = headA;
        ListNode* bTmp = headB;
        while(aTmp) {
            a++;
            aTmp = aTmp->next;
        }
        while(bTmp) {
            b++;
            bTmp = bTmp->next;
        }
        aTmp = headA;
        bTmp = headB;
        if(a > b) {
            while(a - b > 0) {
                aTmp = aTmp->next;
                a--;
            }
        }
        else {
            while(b - a > 0) {
                bTmp = bTmp->next;
                b--;
            }
        }
        while(aTmp != bTmp) {
            aTmp = aTmp->next;
            bTmp = bTmp->next;
        }
        return aTmp != nullptr ? aTmp:nullptr;
    }
};

思路二: