1. 142. 环形链表2
https://leetcode-cn.com/problems/linked-list-cycle-ii/
https://leetcode-cn.com/problems/linked-list-cycle-ii/
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
/*
解法1: 使用hash,查看是否之前的节点已经走过
执行用时 :12 ms; 内存消耗: 6.4M
*/
func detectCycle(head *ListNode) *ListNode {
if head == nil || head.Next == nil{
return nil
}
var hash = make(map[*ListNode]int)
for head != nil {
if _,ok := hash[head]; ok{
return head
}
hash[head] = head.Val
head = head.Next
}
return nil
}
/*
解法2:先判断是否有环,再寻找环的入口,通过循环head和fast指针
*/
func detectCycle(head *ListNode) *ListNode {
if head == nil || head.Next == nil{
return nil
}
fast, slow := head, head
for fast != nil && fast.Next != nil{
fast = fast.Next.Next
slow = slow.Next
if fast == slow{
break
}
}
if fast == nil || fast.Next == nil{
return nil
}
//has cycle
for fast != head{
fast = fast.Next
head = head.Next
}
return fast
}