题意:不改变两个原始链表A,B的情况下找到两个链表开始重叠的那个节点,若没有重叠,则返回NULL;
解法:假设A,B的长度分别为A.length=a+c,B.length=b+c,重叠的长度为c。因为a+c+b+c = b+c+a+c,即a+c+b = b+c+a,那么在最后还剩c个节点的时候一定会相遇。如果c的长度为0,那么会在NULL处相遇。
复杂度:时间复杂度:O(m+n),空间复杂度:O(1)。
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* a = headA;
ListNode* b = headB;
while (a != b) {
a = a==NULL ? headB : a->next;
b = b==NULL ? headA : b->next;
}
return a;
}
};
网友评论