07. 链表相交

rt :给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

solution: 计算两个链表长度,有交集那么两个链表后半段相等,那么长的减去长的部分,同事遍历

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        int lenA = 0;
        int lenB = 0;
        ListNode* curA = headA;
        ListNode* curB = headB;
        for(ListNode* cur = headA; cur != NULL; cur = cur->next) ++lenA;
        for(ListNode* cur = headB; cur != NULL; cur = cur->next) ++lenB;
        if (lenA > lenB) {
            int diff = lenA - lenB;
            while (diff--) {
                curA = curA->next;
            }
        } else {
            int diff = lenB - lenA;
            while (diff--) {
                curB = curB->next;
            }
        }
        while (curA != NULL && curB != NULL && curA != curB) {
            curA = curA->next;
            curB = curB->next;
        }
        return curA;
    }
};

 

posted @ 2022-11-11 20:04  tuffy_tc  阅读(17)  评论(0)    收藏  举报