判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)
生活随笔
收集整理的这篇文章主要介绍了
判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
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;}
}
总结
以上是生活随笔为你收集整理的判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mysql 数据修改记录日志_mysql
- 下一篇: 中央音乐学院计算机研究生,2020北京中