如何判断单链表是否有环
来源:互联网 发布:上海质检院待遇知乎 编辑:程序博客网 时间:2024/05/22 15:27
这个是一个比较有意思的问题,我最开始想到方法是指定一个指针依次向后移动在与前面的每个节点依次比较,但是这个算法时间复杂度为O(n)效率很低,肯定不行。又想了一个效率比较高的算法,基本思想就是定义两个指针,让他们互相追赶,可以想象成两个人,前面一个人比后面一个人速度快,如果链表没有环,那么前面一个人就不会和另一个人相遇,但如果有环,就相当于两个人在操场上跑步,因为两个人速度不一样,所以两人最终一定会相遇,在单链表中也是这样,如果有环,则指针一定会相遇,如果没有环,则移动叫快的指针会先到达NULL。
下面是算法实现的代码。
先定义linked类型
typedef struct node{ int data; struct node *next;}*linked;
这里是判断是否有环的算法
int isRing(linked l){ linked p1 = l,p2 = l; while(p2 != NULL) { p1 = p1 ->next; p2 = p2 ->next; if(p2 == NULL) return 0; //若无环,则p2会先到达NULL,则返回0 p2 = p2 ->next; if(p1 == p2) return 1; //若有环,p1与p2一定会相等,返回1 } return 0; //若退出循环,则p2为NULL,是无环,返回0}
阅读全文
1 0
- 如何判断单链表是否有环存在
- 如何判断一个单链表是否有环
- 如何判断单链表是否有环?
- 如何判断单链表是否有环
- 如何判断单链表是否有环
- 如何判断链表是否有环
- 如何判断单链表中是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- 如何判断双链表是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- 如何判断链表中是否有环
- *p++和(*p)++区别
- pc调试微信h5页面
- MSDN例子获取操作系统版本信息Getting the System Version
- java split |
- c#中bin,obj,properties文件夹的作用
- 如何判断单链表是否有环
- 自行装配适合深度学习的电脑
- 常见开发安全规避和敏感信息处理
- 某安全浏览器竟然也被查出高危漏洞?开源安全问题不容忽视
- 数据仓库架构
- NodeJS 异步 async / await 方案
- HDOJ1251 统计难题(字典树)
- Mac环境变量配置书写格式
- linux iptables常用命令之配置生产环境iptables及优化