判断链表有环问题

经典的面试问题:

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

问题:

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


Solution1:

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


Solution2:

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


Solution3:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值