检测链表中是否有环

No Comments

其实这是个经典算法题,但我却刚刚听说,可见对于算法,我已经漠视很久了。这不是一个专业程序员应该有的状态…… 在此推荐一篇关于程序员能力矩阵的文章,please enjoy~ :)
这个题目是听公司同事说起的,当时我的第一反应也是建立一个哈希表,然后循环检查元素是否已经存在于这个表中,没有就添加进去,并检查下一个,如果有就说明此链表是个环。甚至为了优化性能,可以隔几个检查一次,这样还能减少比对次数。后来google了一下,豁然开朗~
简单说来,就是设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步(如果能证明其他数值性能更高,欢迎补充),如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)

阅读全文 »