链表如果相交则两个链表的形态应该是Y或者是V型,所以判断两个链表是否相交有两种方式:

一、比较两个链表的尾部是否相同,如果相同则两个链表相交,交叉点可以通过两个链表的长度差进行计算,因为交点后面的长度是相同的,差值是交点前形成的,可以分别设定两个指针,长的链表先遍历到差值的位置,短的链表指向头部,分别遍历直到相等就是交点的所在。

int IsCross(ListNode *p, ListNode *q){if(p == NULL || q == NULL){return 0;}ListNode *node1 = NULL;ListNode *node2 = NULL;while(p != NULL){node1 = p;p = p->next;}while(q != NULL){node2 = q;q = q->next;}if(node1 == node2){return 1;}else{return 0;}
}

寻找交点:

ListNode *FindNode(ListNode *p, ListNode *q){if(p == NULL || q == NULL){return NULL;}ListNode *node1 = p;ListNode *node2 = q;int len1 =  0, len2 = 0;while(node1 != NULL){node1 = node->next;len1++;}while(node2 != NULL){node2 = node2->next;len2++;}int len = len1 > len2 ? len1 - len2 : len2 -len1;ListNode *lenNode = len1 > len2 ? p : q;ListNode *shortNode = len1 < len2 ? p : q;for(int i = 0; i < len + 1;i++){lenNode = lenNode->next;}while(shortNode != NULL && lenNode != NULL && shortNode != lenNode){shortNode = shortNode->next;lenNode = lenNode->next;}return shortNode;
}

二、如果两个链表相交,那么如果将一个链表的首尾相连,那么两个链表和在一起就会形成一个有环的链表,问题就归结到单链表是否有环的问题:

int IsCross(ListNode *p, ListNode *q){if(p == NULL || q == NULL){return 0;}ListNode *t = p;while(t->next != NULL){t = t->next;}t->next = p;ListNode *fast = q;ListNode *slow = q;while(fast != NULL && fast->next != NULL){fast = fast->next->next;slow = slow->next;if(fast == slow){break;}}if(fast != NULL && fast->next != NULL){return 1;}else{return 0;}
}

判断连个单链表是否交叉,并找到交叉点相关推荐

  1. 判断两个单链表是否相交及找到第一个交点

    题目:给两个单链表,如何判断两个单链表是否相交?若相交,则找出第一个相交的节点.  这道题的思路和解法有很多,在这把这道题的解法做一个详细的总结. 解这道题之前,我们需要首先明确一个概念:  如果两个 ...

  2. c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...

    如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...

  3. 7_2判断两个单链表是否相交,若相交,求出第一个交点

    转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4251372.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...

  4. Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点

    找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...

  5. java 判断两个单链表是否相交

    文章目录 题目 思考 源码 环的入口 题目 单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交.请实现一个函数,如果两个链表相交,请返回 ...

  6. 判断两个单链表是否相交--java实现

    题目描述:单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交.请实现一个函数,如果两个链表相交,请返回相交 的第一个节点;如果不相交,返 ...

  7. 判断带头结点单链表是否递增有序

    #include <bits/stdc++.h> using namespace std;//节点类 struct node {int val;node *next; };bool isS ...

  8. 单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点

    本博客主要记录两个解法: 1.求两个单链表的节点个数,消除结点个数不同带来的影响,两个指针一起走,相遇即相交点. 2.数学方式求解. 一.求结点个数,消除结点个数不同带来的影响,俩指针同步走 思路:两 ...

  9. 判断带头结点单链表是否递增

    int judge(LinkList L) {LNode *p=L->next,*q;while(p){while(p->next!=NULL){q=p->next;if(q-> ...

最新文章

  1. Web漏洞扫描(三:Burp Suite的基本操作)
  2. 医疗实体链接(标准化)论文解读 (附代码) A Lightweight Neural Model for Biomedical Entity Linking
  3. 【深度学习】基础知识 | 超详细逐步图解 Transformer
  4. Python邮件发送案例
  5. docker镜像制作(二)——构建企业镜像LAMP+BBS
  6. 深入理解java垃圾回收机制
  7. Face Alignment by 3000 FPS系列学习总结(一)
  8. Flash Builder非法关闭导致无法启动
  9. 深度学习实践与部署(开篇)
  10. Office365—Exchange管理2—连接Exchange PowerShell
  11. weico.android批量转发,weico android|Weico新浪微博3.3.5 客户端_手机软件
  12. Untiy3D - 3 打飞碟小游戏
  13. 判断单链表是否中心对称算法
  14. c语言循环语句试讲教案,C语言For循环试讲教案(7页)-原创力文档
  15. c语言输出星号一行比一行星号少一个,c语言打印空白星号矩形
  16. 《通信技术导论(原书第5版)》——2.8 增值电话应用系统
  17. 项目组织战略管理及组织结构
  18. 数学术语的英汉对照(权威,全面)
  19. Warning: Class ‘com.xxx.xxx‘ not found in module ‘xxxx‘
  20. 【Nature重磅】OpenAI科学家提出全新强化学习算法,推动AI向智能体进化

热门文章

  1. 异步回调发展(地狱回调)
  2. python kafka kerberos 验证 消费 生产
  3. truncate(can)
  4. URAL 1992 CVS 可持久化链栈
  5. DNS篇之二DNS记录类型
  6. office安装出现windows installer服务不能更新一个或多个受保护的windows文件
  7. 五种方法实现Linux批量重命名文件
  8. k阶原点距和k阶中心距各是说明什么数字特征
  9. LeetCode 116. Populating Next Right Pointers in Each Node
  10. Linux下Qt的QPixmap加载图片无法显示的问题