题目描述
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/linked-list-cycle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
- 刚开始我准备用查找重复项的暴力算法来解决,但发现如果是环形,就会陷入死循环,
- 参考官方解答之后发现官方的快慢法和我的思想比较相似,我的是当找不到节点head=head.next,而他的不管找不找得到head都要=head.next,只是速度慢一些,所以我在原有代码基础上修改了一下
代码示例
func hasCycle(head *ListNode) bool {
if head=nil{return false}
for p := head.Next; head != p; head = head.Next {
for i := 0; i < 15; p = p.Next {
if p == head {
return true
} else if p == nil {
return false
} else {
i++
}
}
}
return true
}
执行结果
更多
更多解决方法请参考:https://leetcode.cn/problems/linked-list-cycle/solution/