天天看點

LeetCode相交連結清單

LeetCode相交連結清單

1.分别計算A、B連結清單的長度 countA、countB

2.求A、B連結清單的內插補點index = abs(countA - countB),哪個連結清單長哪個連結清單先走index步

3.A、B連結清單同時走,若走到相同結點,說明有相交結點

/**

 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode *travel_nodeA = headA,*travel_nodeB = headB,*current_nodeA = headA,*current_nodeB = headB;
    int countA = 0,countB = 0,index = 0,count = 0;
    while(travel_nodeA != NULL){
        travel_nodeA = travel_nodeA->next;
        countA++;
    }
    while(travel_nodeB != NULL){
        travel_nodeB = travel_nodeB->next;
        countB++;
    }
    index = abs(countA - countB);
        if(countA > countB){
            for(int i = 0; i < index; i++){
            current_nodeA = current_nodeA->next;
            }
        }else{
            for(int i = 0; i < index; i++){
            current_nodeB = current_nodeB->next;
            }
        }
    while(current_nodeA != NULL && current_nodeB != NULL){
        if(current_nodeA == current_nodeB){
            return current_nodeA;
        }
        current_nodeA = current_nodeA->next;
        current_nodeB = current_nodeB->next;
    }
    
        return NULL;
    
    
}
           

繼續閱讀