面试问题3:给一个单链表,怎么判断是否有环
问题描述:给一个单链表,怎么判断是否有环
前提条件:所给的指针指向的位置不确定(不一定指向头结点),单链表的长度未知,链表中存储的数据类型未知
个人方法:由于不知道链表的长度,以及所存储的数据类型,并且所给指针的指向任意的结点。那么不能按照从头依次遍历的方法。采用标记位的方法,初始化visited数组为0,将所给的指针依次移动,并且修改visited为1,每次移动判断该出的visited是否为0,若为0则表示未遍历到,当所得到的visited为1时,说明此单链表存在环。
其他方法之一:使用p、q两个指针,p总是向前走,但q每次都从头开始走,对于每个节点,看p走的步数是否和q一样。如图,当p从6走到3时,用了6步,此时若q从head出发,则只需两步就到3,因而步数不等,出现矛盾,存在环
其他方法之二:使用p、q两个指针,p每次向前走一步,q每次向前走两步,若在某个时候p == q,则存在环。
作者: 伊甸一点
出处: http://www.cnblogs.com/zpfbuaa/
本文版权归作者伊甸一点所有,欢迎转载和商用(须保留此段声明),且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文链接 如有问题, 可邮件(zpflyfe@163.com)咨询.