//链表相交时的交点
PSListNode IntersectionNode(PSListNode pL1, PSListNode pL2)
{int count1 = 0;int count2 = 0;PSListNode PSList1 = pL1;PSListNode PSList2 = pL2;PSListNode pMeetNode1 = HasCycle(pL1);PSListNode pMeetNode2 = HasCycle(pL2);if ((NULL == pL1) || (NULL == pL2)){return NULL;}else{//先求每个链表的长度//两个链表都没环if ((NULL == pMeetNode1) && (NULL == pMeetNode2)){while (NULL != PSList1){PSList1 = PSList1->pNextNode;count1++;}while (NULL != PSList2){PSList2 = PSList2->pNextNode;count2++;}}//两个链表都有环else if ((NULL != pMeetNode1) && (NULL != pMeetNode2)){PSListNode pInNode1 = FindEnterNode(PSList1, pMeetNode1);PSListNode pInNode2 = FindEnterNode(PSList2, pMeetNode2);//先计算头指针到环入口结点的长度,再计算环的长度while (PSList1 != pInNode1){PSList1 = PSList1->pNextNode;count1++;}while (PSList1->pNextNode != PSList1){PSList1 = PSList1->pNextNode;count1++;}count1++;;while (PSList2 != pInNode2){PSList2 = PSList2->pNextNode;count2++;}while (PSList2->pNextNode != PSList1){PSList2 = PSList2->pNextNode;count2++;}count2++;;}//一个有环,一个没环,不会相交else{return NULL;}//让长度长的链表的头指针先走它长于另一个链表的结点数//在计算链表长度时修改了这两个指针的值,在这儿需要把它们改回来PSList1 = pL1;PSList2 = pL2;if (count1 > count2){int temp = count1 - count2;while (0 == temp--){PSList1 = PSList1->pNextNode;}}else{int temp = count2 - count1;while (0 == temp--){PSList2 = PSList2->pNextNode;}}//此时,让两个链表的头指针同时移动,直到它们相等就找到了交点//因为题目是找交点,那么交点就存在,所以这儿不用怕死循环while (1){if (PSList1 = PSList2){break;}PSList1 = PSList1->pNextNode;PSList2 = PSList2->pNextNode;}return PSList1;}
}

求链表相交时的交点(C语言)相关推荐

  1. Bentley-Ottmann算法:求N条线段的交点

    Bentley-Ottmann算法:求N条线段的交点 Bentley-Ottmann算法 算法复杂度 1. 使用暴力求解,遍历每一条线段 i ,固定 i 遍历 j 与 i 是否存在交点: 2. 此时我 ...

  2. 已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解)

    已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解) 在一个二维平面上给定两个圆的圆心横纵坐标.半径共6个参数, 求交点. 这个问题无非是解二元二次方程组.普通二元二次方程联立消元求解的困难在于 ...

  3. R语言求拟合函数图形的交点坐标

    R语言求拟合函数图形的交点坐标 通过二分类无限逼近的方法获得的 代码如下: 1)四个曲线的数据结构 v_ac=log(vir_1) op_log=log(opp) test1=data.frame(v ...

  4. 转:链表相交问题 详解

    源地址:http://blog.163.com/bbluesnow@126/blog/static/27784545201251051156817/ 链表相交问题 2012-06-10 17:15:3 ...

  5. 如何判断链表有环、如何判断两个链表相交

    如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现"环",就像题图这样.如何用程序判断出这个链表是有环链表? 不允许修改链表结构. 时间复杂度O(n),空间复杂度O(1) ...

  6. 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ

    LeetCode24. 两两交换链表中的节点 力扣题目链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 ...

  7. 数据结构与算法之复制含有随机指针节点的链表和两个链表相交的一系列问题

    数据结构与算法复制含有随机指针节点的链表和两个链表相交的一系列问题 目录 复制含有随机指针节点的链表 两个链表相交的一系列问题 1. 复制含有随机指针节点的链表 题目概述 思路:创建一个HashMap ...

  8. neo4j 查询同一节点的两个上级_链表的魅力:两个单向链表的第一个交点

    最近听了左神的算法课,对一些常用数据结构以及算法改进的思路有了更深的理解,特此总结,不定期更新算法题目以及答案总结!笔者使用C++进行算法重现!虽然左神使用的是JAVA,但他自己也说了,算法与语言无关 ...

  9. c语言 链表_小陈的C语言笔记---链表(详细讲解基本操作和概念)

    关于链表的TIPS: 链表中各结点在内存中可以不是连续存放的,各数据接点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的. 在链表结点 的数据结构中,结构体内的 ...

最新文章

  1. cursor:hand与cursor:pointer的区别介绍
  2. vue 动态设置背景图片
  3. 【AtCoder - 2554】Choose Integers (找规律,或枚举)
  4. MIP个性化组件提交规范
  5. [bzoj] 2049 洞穴勘探 || LCT
  6. linux下oracle中文乱码问题的解决
  7. 4、Windows2008 R2安装Vcenter5.0
  8. oracle 删除jobs日志,修改Oracle的Job Scheduler 日志级别及删除运行日志
  9. C# 基于MySQL的数据层基类(MySQLHelper)
  10. 信息安全产业爆发在即 十三五年均增长将达20%以上
  11. 使用正则表达式大写SQL关键字
  12. [转载].程序匠人 - 程序调试(除错)过程中的一些雕虫小技
  13. PythonーーJetBrains PyCharm安装
  14. 死磕 Framework准没错,大把的高薪岗位等着你~
  15. Xtend == 与 ===
  16. 计算机过滤器的作用,前置过滤器有什么好处 前置过滤器好处介绍【详解】
  17. Linux 2.6下Driver开发的34个变化[转贴]
  18. 前端学习日志-4-js
  19. HTML中spry菜单栏,DreamweaverCS3中用“spry菜单栏”制作纵向导航菜单.docx
  20. jsp中定义日期格式

热门文章

  1. 使用Grab的实验平台进行混沌实验编排
  2. 使用CLI进行高速跨域日志复制、历史数据重新索引与数仓投递
  3. 专注数据,打造阿里云Elasticsearch“一站式”数据服务体系
  4. 测试之道--阿里巴巴八年测试专家倾情奉献
  5. 麒麟信安:根植于openEuler,走操作系统自主创新之路
  6. VMware和NVIDIA推出新一代混合云架构
  7. 17 年安全界老兵,专注打造容器安全能行吗?
  8. 超级干货!31 条2020 年最新版 ZooKeeper面试题,先收藏再看!| 博文精选
  9. base昆明,腾讯云在合作伙伴的阵营中@了TA
  10. Docker 官方公共仓库 Docker Hub 遭攻击,恐19 万用户信息泄露;Intel 10核心新品要现身了?...