欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2024/9/27 编程问答 78 豆豆
生活随笔 收集整理的这篇文章主要介绍了 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(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语言)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。