Leetcode 160. Intersection of Two Linked Lists
Leetcode 160. Intersection of Two Linked Lists
错解
一开始没看清题目的要求中,提到最后表结构不能变,想到的做法是:
先遍历A,把A翻转,然后B就可以走到headA判断出它们是否相交,但是即便如此,也不能判断出相交点在哪里,而且还会破坏链表的结构,所以这种写法不行。
正解
把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。