判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)

来源:互联网 发布:淘宝女装上下架时间 编辑:程序博客网 时间:2024/06/06 03:18
int IsListCroseWithCycle(PSListNode pL1, PSListNode pL2){    PSListNode pMeetNode1 = HasCycle(pL1);    PSListNode pMeetNode2 = HasCycle(pL2);    if ((NULL == pL1) || (NULL == pL2))    {        return 0;    }    //两个链表都没环的情况    else if ((NULL == pMeetNode1) && (NULL==pMeetNode2))    {        PSListNode PSList1 = pL1;        PSListNode PSList2 = pL2;        while (NULL != PSList1->pNextNode)        {            PSList1 = PSList1->pNextNode;        }        while (NULL != PSList2->pNextNode)        {            PSList2 = PSList2->pNextNode;        }        //不带环的两个链表相交,那么它们的最后一个结点的指针的值一定是相等的        if (PSList1 == PSList2)        {            return 1;        }        else        {            return 0;        }    }    // 两个链表都有环的情况(这种情况肯定是两个链表共用一个环)    else if ((NULL != pMeetNode1) && (NULL != pMeetNode2))    {        while (pMeetNode1->pNextNode != pMeetNode1)        {            //找到一个链表中处于环中的点,遍历另一个链表中环中的点,看他们是否会出现相等的情况,出现,则可能相交            if (pMeetNode1 == pMeetNode2)            {                return 1;            }            pMeetNode1 = pMeetNode1->pNextNode;        }        //跳出循环时,遍历的组后一个结点还没进行比较,此处处理这种情况        if (pMeetNode1 == pMeetNode2)        {            return 1;        }        else        {            return 0;        }    }    // 一个链表有环,一个没环,这种情况不会相交    else    {        return 0;    }}
0 0
原创粉丝点击