每日一题——链表相交问题

来源:互联网 发布:孙子兵法华杉 知乎 编辑:程序博客网 时间:2024/06/05 15:28

这里写图片描述
1>判断两个链表是否相交,若相交,求交点(链表不带环)
2>判断两个链表是否相交,若相交,求交点(链表可能带环)

//链表不带环ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        // write your code here        if(headA ==NULL || headB == NULL)            return NULL;        int lenA = 0;        int lenB = 0;        ListNode* A = headA;        ListNode* B = headB;        while(A)        {            lenA++;            A = A->next;        }        while(B)        {            lenB++;            B = B->next;        }        ListNode* curA = headA;        ListNode* curB = headB;        if(lenA > lenB)        {            int len = lenA - lenB;            while(len--)            {                curA = curA->next;            }        }        else if(lenA < lenB)        {            int len = lenB - lenA;            while(len--)            {                curB = curB->next;            }        }        else        {}        while(curA->val != curB->val)        {            curA = curA->next;            curB = curB->next;        }        return curA;    }
带环链表可能相交分为两种情况:1,一个带环,一个不带环;                          2,两个都带环(该环必须共享,才能保证相交)。解题思路:1,先判断两个链表是否带环;2,分3种情况    若一个有环,一个无环,肯定不相交;    两个都有环;若要相交,环必须是共享的。即若相交,交叉点肯定在起始点与环入口之间。    两个都没环。(就是第一个问题)

附加题:
输出了6个‘-’(在Linux上验证)
第一次fork,共两个进程,输出两个
第二次fork,共四个进程,输出四个
共6个