PSListNode HasCycle(PSListNode pHead)
{if ((NULL == pHead) || (NULL == pHead->pNextNode)){return NULL;}else{PSListNode pFast = pHead->pNextNode->pNextNode;PSListNode pSlow = pHead->pNextNode;//利用快慢指针,让快指针每次走两步,慢指针每次走一步,要是快指针没有走到NULL,且快指针与慢指针指向相同就说明是有环while (pFast != pSlow){//快指针要是没有指向为空,那么慢指针就不可能指向空(快指针走得快)if (NULL == pFast){return;}else{pFast = pFast->pNextNode;pSlow = pSlow->pNextNode;   if (NULL == pFast){return;}else{pFast = pFast->pNextNode;}}}return pFast;}
}int GetCyleLen(PSListNode pMeetNode)
{//默认传的参数是HasCycle函数返回的环中的一个结点if (NULL == pMeetNode){return 0;}else{int nCount = 1;PSListNode pNode = pMeetNode;while (pMeetNode != pNode->pNextNode){pNode = pNode->pNextNode;nCount++;}return nCount;}
}
//pMeetNode参数是用HasCycle函数求链表是否有环时pFast指针与pSlow指针的碰撞点
//定律:在链表头,pFast指针与pSlow指针的碰撞点分别设定一个指针,每次各走一步,两个指针必定相遇,则相遇第一点为环入口点
PSListNode FindEnterNode(PSListNode pHead, PSListNode pMeetNode)
{PSListNode pNode = pHead;if ((NULL == pHead) || (NULL == pMeetNode)){return NULL;}while (pNode != pMeetNode){pNode = pNode->pNextNode;pMeetNode = pMeetNode->pNextNode;}return pNode;
}

判断单链表是否带环?若带环,求环的长度?求环的入口点?(C语言)相关推荐

  1. 如何判断单链表是否存在环

    原文:http://blog.csdn.net/liuxialong/article/details/6555850 如何判断单链表是否存在环 给定一个单链表,只给出头指针h: 1.如何判断是否存在环 ...

  2. 判断单链表是否有环及环的链接点(转)

    这篇文章是转载自蒙恩的罪人的博文:判断单链表是否有环及环的链接点(转),博文网址:http://blog.sina.com.cn/s/blog_725dd1010100tqwp.html 给定一个单链 ...

  3. 题目:代码实现判断单链表是否有环

    一.单链表环的定义: 有环的定义是,链表的尾节点指向了链接中间的某个节点.比如下图,如果单链表有环,则在遍历时,在通过结点J之后,会重新回到结点D. 题目:0.如何判断单链表里面是否有环? 算法的思想 ...

  4. 笔面集锦:判断单链表里面是否有环及相关扩展题

    源于网络 1.如何判断单链表里面是否有环? 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环 ...

  5. 判断单链表是否存在环

    周末参加完美世界校园招聘中就有一道判断单链表是否有环的编程题. 写一个C/C++函数,来判断一个单链表是否具有环,如果存在环,则给出环的入口点. 有一个单链表,其中可能有一个环,也就是某个节点的nex ...

  6. 判断单链表是否存在环及环的入口点

    问题1:如何判断单链表中是否存在环(即上图中从结点E到结点R组成的环)? 解答: 设一快一慢两个指针(实际上是两个迭代器,Node *fast, *low)同时从链表起点开始遍历,其中快指针每次移动长 ...

  7. 经典算法题 -- 判断单链表是否成环及寻找成环节点

    引言 判断单链表是否成环是一个计算机领域的经典算法问题 如何通过程序判断传入的链表是否存在环,并且求出环长度.成环点等问题 下面就是一个存在环的单链表 基本算法 -- hash 最简单的方法是创建一个 ...

  8. 判断单链表L是否递增

    设计一个算法,判断单链表L是否是递增的.实现这个算法,并完成测试. head.h #ifndef HEAD_H_INCLUDED #define HEAD_H_INCLUDED #include &l ...

  9. 3 判断单链表的对称性

    3 判断单链表的对称性 作者: 冯向阳时间限制: 1S章节: 课程设计 问题描述 : 设带头结点的单链表的头指针为head,结点结构由data和next两个域构成,其中data域为字符型.在使用单链表 ...

最新文章

  1. svg做自定义折线图表
  2. 面试和学习必备--Java多线程
  3. linux 监控命令free,简单了解Linux性能监控命令free
  4. 无处不在的container_of
  5. Python找出某元素的索引下标
  6. vs怎么调试php程序,vscode如何调试运行c#程序
  7. snmp服务 2003 镜像_美国掌握全球70%根服务器,一旦对中国关闭,我们将无法上网?...
  8. linux端口对ip开放,Linux 开放IP端口
  9. 拓端tecdat|R语言基于线性回归的资本资产定价模型(CAPM)
  10. oracle rpad()函数
  11. LM358电压跟随器
  12. 奥拉星插件flash下载手机版下载安装_flash控件手机版
  13. 今天,我们求知若渴、虚心若愚(附技术PPT)
  14. 形容等待时间长的句子_关于等待的句子大全
  15. 社群活动——撬动用户参与意愿的7个指导原则
  16. 高通MDM9607平台--线程资源泄漏问题定位
  17. 刘一男词汇课(从sail到shed):“重复是记忆之母,理解是记忆之父。“
  18. vue项目下拉框内容过长做一个滚动条的效果
  19. BZOJ1455罗马游戏
  20. 树和森林的遍历 (树的建立和输出)

热门文章

  1. 使用Blink SQL+UDAF实现差值聚合计算
  2. 【开发者成长】每个人都在编写草率代码
  3. 达摩院2020十大科技趋势发布:科技浪潮新十年序幕开启
  4. 基于Tablestore管理海量快递轨迹数据架构实现
  5. 如何在Flutter上优雅地序列化一个对象
  6. 阿里云ACM:云原生配置管理利器,让云上的Spring Cloud应用配置管理舞动起来
  7. 常见Serialize技术探秘(ObjectXXStream、XML、JSON、JDBC byte编码、Protobuf)
  8. 银行业AI:炒作背后的现实——“尽管对新技术感到兴奋,但银行业态度非常谨慎”
  9. java 最大矩形_Java实现 LeetCode 85 最大矩形
  10. SpringCloud Gateway 快速入门_01