LeetCode 160. Intersection of Two Linked Lists

题意:不改变两个原始链表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;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。