判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
2018-01-24 21:49
330 查看
SListNode* SListGetCrossNodeCycle(SListNode* list1,SListNode* list2)//判断两个链表是否相交,若相交,求交点(链表可能带环) { SListNode *M1 = SListIsCycle(list1);//若带环,返回相遇点 SListNode *M2 = SListIsCycle(list2); SListNode *entryNode1 = SListEntryNode(list1,M1);//返回入口点 SListNode *entryNode2 = SListEntryNode(list2,M2); SListNode *entryNext1 = entryNode1->_next;//保存入口点的next,为恢复环做准备 SListNode *entryNext2 = entryNode2->_next; SListNode *meet = NULL; SListNode *cur1 = M1->_next; if(M1 == NULL && M2 == NULL)//两个都不带环,转换成Y型交点问题 { return SListGetCrossNode(list1,list2); } else if(M1 && M2)//两个都带环问题,三种情况分别讨论 { while(cur1 != M2 && cur1 != M1)//第一种情况,两个不相交问题 { cur1 = cur1->_next; } if(cur1 == M1) { return NULL; } else//区分第二种,和第三种情况 { if(entryNode1 == entryNode2) { entryNode1->_next = NULL; entryNode2->_next = NULL; meet = SListGetCrossNode(list1,list2); return meet; entryNode1->_next = entryNext1;//恢复带环 entryNode2->_next = entryNext2; } else { return entryNode2; } } } else//一个带环,一个不带环 { return NULL; } }
以上调用的子函数请查看单链表经典面试题(2)
相关文章推荐
- 链表--1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
- 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)
- 1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】
- 判断两个链表是否相交,若相交,求交点:1.不带环。2.有可能带环
- 判断两个链表是否相交,若相交,求交点。(假设链表不带环)(C语言)
- 判断两个链表是否相交?若相交,求交点(假设链表带环)
- 判断两个链表是否相交,若相交,求交点。(假设链表带环、不带环)
- 判断两个链表是否相交,若相交,求交点,若带环呢/fork继承问题
- <笔试><面试>C/C++单链表相关(4)判断两链表是否相交,求交点(链表不带环/可能带环)
- ]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)
- 每日一刷——1.判断两个链表是否相交,若相交求交点(链表不带环&带环)2.fork()问题
- 判断两链表是否相交,若相交求交点(链表可能带环)
- 如何判断两个链表是否相交。(假设链表带环、不带环)
- 判断两个链表是否相交,若相交,求交点,考虑带环情况实现代码
- 面试题----判断两个链表是否相交(可能带环)
- 求两个链表是否相交,若相交,求交点(链表可能带环)
- <笔试><面试>C/C++单链表相关(4)判断两链表是否相交,求交点(链表不带环/可能带环)
- 链表逆序、判断是否有环、求环的起点;两个链表是否相交、交点
- 判断两个单向链表是否有相交,并找出交点。
- 编程之美-编程判断两个链表(可能含环)是否相交以及相交的第一个结点