Leetcode 160. Intersection of Two Linked Lists

佚名 / 2024-11-05 / 原文

Leetcode 160. Intersection of Two Linked Lists

错解

一开始没看清题目的要求中,提到最后表结构不能变,想到的做法是:
先遍历A,把A翻转,然后B就可以走到headA判断出它们是否相交,但是即便如此,也不能判断出相交点在哪里,而且还会破坏链表的结构,所以这种写法不行。

正解

pAa4JWF.png

把A,B首位相接,根据节点数量关系,我们能确定,只要二者相交,遍历的时候就一定会在交点相遇。

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

注意curA = curA?curA->next:headB;这里不能写curA->next?curA->next:headB,我们要允许curA/B能够走到NULL,否则虽然不会影响在相交情况下的判断,但是在不相交的情况下,由于curA和curB都不会走到NULL,就会陷入死循环TLE。