【LeetCode】剑指 Offer II 023. 两个链表的第一个重合节点

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *pA=headA,*pB=headB;
        int la=0,lb=0,temp;

        while(pA){
            ++la;
            pA=pA->next;
        }
        while(pB){
            ++lb;
            pB=pB->next;
        }

        if(la>lb){
            temp=la-lb;
            headA=headA->next;
            while(--temp){
                headA=headA->next;
            }
        }
        else if(la<lb){
            temp=lb-la;
            headB=headB->next;
            while(--temp){
                headB=headB->next;
            }
        }

        while(headA){
            if(headA==headB)
                return headA;
            headA=headA->next;
            headB=headB->next;
        }
        return NULL;
    }
};

思路:从头遍历两个链表,记录链表长度,此时再对齐两个链表,同时向后遍历以找到相交节点。

posted @ 2022-02-22 17:08  Jerry2km1  阅读(52)  评论(0)    收藏  举报