您的位置:首页 > 其它

判断单项链表是否存在环

2015-05-15 21:30 204 查看
这个问题是之前去趋势科技面试的时候面试官问的一个问题,当时我没回答的上来,现在在网上找到了解答,现在特在此分享。

最简单的思路是遍历链表,然后针对每一个节点判断在之前的节点中是否出现过,也就是使用一种O(n^2)的算法

但是这样的方法显然不是最优的,我们要开始考虑存在环路的单向链表的特性,他是没有结束节点的,这样我们可以确定一个程序结束条件,就是

只要找到一个结束节点,那么单向链表就是没有环的,剩下的问题就是怎么确定环的存在,我们可以定义两个指针,他们以不同的步调遍历单项链表,

第一个指针步长为1,第二个指针的步长为2,如果第二个指针遇到null 那么就没有环,如果第二个指针遇上第一个指针,那么这个单项链表就存在换

最后时间复杂度锁定在 O(3N),不存在额外的内存开销

参考网页http://www.chinaunix.net/old_jh/23/410637.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: