链表--1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
来源:互联网 发布:淘宝宝贝违规被删除 编辑:程序博客网 时间:2024/06/08 22:56
1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)
1.若链表不带环
则若相交只有一种方式。
方法一:
把List2链接到List1的后面,再遍历List2,如果List2有环则说明相交。且List2的头一定在环上。
方法二:
将List1与List2同时走到链表结尾,如果尾结点相同,则一定有环。
判断相交点:两个链表不一定一样长,所以先算出List1与List2的长度。然后求出两长度差len,将长的先走len步,再同时走,当他俩相遇的时候就为交点。
int Check_NoCricle(ListNode* pHead1,ListNode* pHead2){ if(pHead1 == NULL || pHead2 == NULL) return -1; while(pHead1->Next) pHead1 = pHead1->Next; while(pHead2->Next) pHead2 = pHead2->Next; if(pHead1 == pHead2) return 1; return 0;}ListNode* GetList_EnterNode(ListNode* pHead1,ListNode* pHead2){ assert(pHead1 && pHead2) int len1 = 0; int len2 = 0; ListNode* pCur1 = pHead1; ListNode* pCur2 = pHead2; while(pCur1) { len1++; pCur1 = pCur1->Next; } while(pCur2) { len2++; pCur2 = pCur2->Next; } pCur1 = pHead1; pCur2 = pHead2; int lensub = len1-len2; if(lensub <= 0) { //List2长 lensub = -lensub; while(lensub){ pCur2 = pCur2->Next; lensub--; } }else{ //List1长 while(lensub){ pCur1 = pCur1->Next; lensub--; } } //走到这里两个链表长度是一样的 while(pCur1 != pCur2) { pCur1 = pCur1->Next; pCur2 = pCur2->Next; } return pCur1;}
1.判断两个链表是否相交,若相交,求交点。(假设链表带环)
这里只给出思路。
若两链表可能带环
则
1.一个链表带环,一个链表不带环。这种情况不可能相交。
2.两个链表都带环。三种情况。这里只给出相交的两种情况。
如果交点在环外,则只有一个交点。
如果交点在环内,则有两个交点任意输出一个即可。
则先判断两个带环链表是否相交
ListNode* Find_CricleNode(ListNode* pHead1,ListNode* pHead2){ assert(pHead1 && pHead2); ListNode* pCur1 = IsHaveCircle(pHead1); ListNode* pCur2 = IsHaveCircle(pHead2); //只要一个没有环,则不存在交点 if(pCur1 == NULL pCur2 == NULL) return GetList_EnterNode (pCur1,pCur2); //走到这里说明两个都有环 ListNode* pMeet1 = FindLoopStart(pHead1); ListNode* pMeet2 = FindLoopStart(pHead2); if(pMeet1!=NULL && pMeet2!=NULL) { ListNode* pTemp = pMeet1; while(pMeet1 != pTemp->Next) { //这里一定要先判断第一个,并且这里输出的交点不一定一定是第一个交点。如果交点在环外则不是。 if(pTemp == pMeet2) return pTenp; pTemp = pTemp->Next; } } return NULL;}
如果都带环且交点在环的内部,找出某一个环的入口点,输出即可。
如果环且交点在外部,则找到任意一个环入口,把环断掉。再用方法一即可。这里只给出思路。
阅读全文
0 0
- 链表--1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
- 1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】
- 1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】
- 判断两个链表是否相交,若相交,求交点。(假设链表不带环)(C语言)
- 判断两个链表是否相交,若相交,求交点。(假设链表带环、不带环)
- 判断两个链表是否相交,若相交,求交点:1.不带环。2.有可能带环
- 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)
- 求两个链表是否相交,若相交,求交点(链表可能带环)
- 判断两个链表是否相交?若相交,求交点(假设链表带环)
- 判断两链表是否相交,若相交求交点(链表可能带环)
- 判断两个链表是否相交,若相交,求交点,若带环呢/fork继承问题
- 判断两个链表是否相交,若相交,求交点,考虑带环情况实现代码
- 每日一刷——1.判断两个链表是否相交,若相交求交点(链表不带环&带环)2.fork()问题
- ]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)
- 判断两个链表是否相交,若相交,求交点。
- 判断两个链表是否相交,若相交,求交点
- 判断两个链表是否相交,若相交,求交点
- 如何判断两个链表是否相交。(假设链表带环、不带环)
- (68)TreeSet练习:两种排序方式:自然排序(实现comparable接口)、比较器
- 为什么使用PostCSS?
- Hibernate 分页
- 【docker】--JBoss集群的搭建
- 链表面试题总结----(可能带环相交问题+复杂链表的复制)
- 链表--1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
- Calabash-ios安装
- 机器学习资料
- 【软工学习】第九章——信息安全知识
- Java8 方法引用和构造器引用
- 文章标题
- 2017年最新版本apt-get安装源替换 阿里云源
- Thread和Runnable的区别
- Android线程通信:Handler,MessageQueue和Looper原理分析