​该题目来源于牛客网《剑指offer》专题。

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

Go语言实现:

/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
//哈希表
func detectCycle(head *ListNode) *ListNode {
//用map的key来判断是否已经存在
m := make(map[*ListNode]int) //遍历链表,如果key不存在则赋值,已存在说明有环,遍历一遍后不存在则无环
for head != nil {
_, ok := m[head]
if ok == false {
m[head] = 1
head = head.Next
} else {
return head
}
} return nil
}
//快慢指针
func detectCycle(head *ListNode) *ListNode {
if head == nil {
return nil
} //定义两个指针,fast一次走两步,slow一次走一步
fast := head
slow := head
for {
//fast遍历一遍,没有环
if fast.Next == nil {
return nil
} fast = fast.Next.Next
slow = slow.Next
//快慢相遇,存在环,跳出循环,注意此时并不一定是环入口结点
if fast == slow {
break
}
} //fast指向开始的地方,一次走一步,直到两者相遇
fast = head
for fast != slow {
fast = fast.Next
slow = slow.Next
} return fast
}

最新文章

  1. iOS tableView右滑显示选择
  2. session在本地可以正常使用,而在sae上却无法使用或者值为空的解决方法
  3. 64位centos下安装python的PIL模块
  4. kubernetes 1.3 的安装和集群环境部署
  5. <php>上传文件的程序
  6. c# GridView Footor列求合计
  7. mvc 微软票据验证
  8. .NET基础笔记(C#)
  9. git代码回滚
  10. Dubbox中开发REST风格的远程调用
  11. windows 终端命令详解
  12. how to select checkbox on cli environment?
  13. CopyOnWriteArraySet简介
  14. Mysql Group by 使用解析
  15. hive建表报错:Specified key was too long; max key length is 767 bytes,hadoophive
  16. 201772020113李清华《面向对象程序设计(java)》第一周学习总结
  17. Java读取oracle数据库中blob字段数据文件保存到本地文件(转载)
  18. hdoj1003 DP
  19. chipmunk 物理引擎的基本概念和基本用法
  20. web开发 那些年基于Redis的Provider库

热门文章

  1. JAVA并发之锁获取步骤及锁优化
  2. jdk1.7扩容时,不论是否有链表,并发都可能出现循环链表
  3. SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
  4. infer 代码静态分析
  5. Visual Studio 2019移除/禁用Live Share按钮
  6. axios全局引用
  7. Java 基础(三)| IO流之使用 File 类的正确姿势
  8. 理解setTimeout()
  9. Java故障定位方法总结
  10. restframework 认证、权限、频率组件