【LeetCode-160 | 链表相交】

2021-12-26  本文已影响0人  CurryCoder
1.jpg 2.jpg 3.jpg 4.jpg
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x): val(x), next(nullptr) {}
};


/*
    解题思路:
        1.指针curA指向A链表,指针curB指向B链表,依次往后遍历
        2.如果curA到了末尾,则curA = headB继续遍历
        3.如果curB到了末尾,则curB = headA继续遍历
        4.当较长链表指针指向较短链表头部节点时,两个链表之间的长度差就消除了。于是,只需要将较短链表遍历两次即可找到交点位置
*/

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if (headA == nullptr || headB == nullptr) {
            return nullptr;
        }
        ListNode *curA = headA;
        ListNode *curB = headB;
        
        while (curA != curB) { 
            curA = curA == nullptr ? headB : curA->next; 
            curB = curB == nullptr ? headA : curB->next; 
        }

        return curA;
    }
};
上一篇下一篇

猜你喜欢

热点阅读