判断链表有环问题

来源:互联网 发布:linux ftp绑定域名 编辑:程序博客网 时间:2024/06/15 18:22

经典的面试问题:

有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。

问题:

1、如何判断一个链表是不是这类链表?
2、如果链表为存在环,如果找到环的入口点?


Solution1:

用一个hash表(c++中可以用set)保存遍历过的指针,每前进一步查看是不是hash表中存在,如果存在,证明有环,并且第一个存在的就是环的入口地址。


Solution2:

快指针,慢指针方案。定义两个指针,一个快指针,每次走一步,慢指针,每两次走一步,这样如果有环,两者肯定能相遇,否则,快指针会走到尾部。(这种方案判断入口点比较麻烦)


Solution3:

反转链表方案。每走一步,将指针反转指向前面的节点,这样如果有环的话,最终会走到头指针,否则会走到尾部(判断是否NULL)。最后还要将原链表反转回来。

0 0