c_cpp 查找两个链表是否相交。解决方案不应使用额外的内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 查找两个链表是否相交。解决方案不应使用额外的内存相关的知识,希望对你有一定的参考价值。

bool is_intersect(ListNode *h1, ListNode *h2) {
    if(!h1 || !h2) return false;
    if(h1 == h2) return true;
    int len1 = 0, len2 = 0;
    for(ListNode *p1 = h1; p1; p1 = p1->next) len1++;
    for(ListNode *p2 = h2; p2; p2 = p2->next) len2++;
    //if(len1 == len2)  // equal length may still intersect! so this checking is wrong.
    //    return false;
    ListNode *p = len1 > len2 ? h1 : h2;
    ListNode *q = len1 > len2 ? h2 : h1;
    int diff = abs(len1 - len2);
    while(diff-- != 0) p = p->next;
    while(p && q) {
        if(p == q) return true;
        p = p->next;
        q = q->next;
    }
    return false;
}

以上是关于c_cpp 查找两个链表是否相交。解决方案不应使用额外的内存的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp GFG如何检查两个给定的线段是否相交

拿捏链表—— 相交链表

1.11判断两个无环单链表是否相交

判断两个单向链表是否相交

java判断两个单链表是否相交

判断两条链表是否相交(公共部分)并找出相交处