判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(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北京中