Fork me on GitHub

面试问题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,则存在环。

posted @ 2016-03-28 19:08  伊甸一点  阅读(466)  评论(0编辑  收藏  举报