LeetCode之Intersection of Two Linked Lists

 /*思路:
 1.找到兩個鏈表的長度;
 2.根據這兩個鏈表的長度差,使較長的那個鏈表向前走相應長度。
 3.同時掃描兩個鏈表,尋找它們的交叉節點。*/
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if(headA == nullptr || headB == nullptr) return nullptr;
        int lenA(0), lenB(0);
        ListNode *A(headA), *B(headB);
        while(A != nullptr){
            ++lenA;
            A = A->next;
        }
        while(B != nullptr){
            ++lenB;
            B = B->next;
        }
        int delta = abs(lenA - lenB);
        if(lenA > lenB){
            while(delta-- > 0) headA = headA->next;
        }
        else if(lenB > lenA){
            while(delta-- > 0) headB = headB->next;
        }
        while(headA != nullptr && headB != nullptr){
            if(headA == headB) return headA;
            headA = headA->next;
            headB = headB->next;
        }
        return nullptr;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章