leetcode

160.相交链表

力扣链接

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode*currentA = headA, *currentB = headB;
        // 计算链表A和B的长度
        int lenA = 0, lenB = 0;
        while(currentA){
            currentA=currentA->next;
            lenA++;
        }
        while(currentB){
            currentB=currentB->next;
            lenB++;
        }
        currentA = headA, currentB = headB;
        // 根据链表A和B长度差值,保证currentA和currentB到结尾长度相等
        // int move =(lenA > lenB)?(lenA-lenB):(lenB-lenA);
        // if (lenA>lenB){
        //     while(move--) currentA = currentA->next;
        // } else {
        //     while(move--) currentB = currentB->next;
        // }
        if (lenB>lenA){
            // 让curA为最长链表的头
            std::swap(lenA, lenB);
            std::swap(currentA, currentB);
        }
        int move = lenA - lenB;
        while(move--) currentA = currentA->next;
        // 遍历找出currentA==currentB
        while(currentA){
            if (currentA==currentB) return currentA;
            currentA = currentA->next;
            currentB = currentB->next;
        }
        return NULL;
    }    
};