判断给定的链表中是否有环
扩展:
你能给出空间复杂度O(1)的解法么?
对于一个给定的链表,返回环的入口节点,如果没有环,返回null
拓展:
你能给出不利用额外空间的解法么?
package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
*
* @param head ListNode类
* @return bool布尔型
*/
func hasCycle( head *ListNode ) bool {
// write code here
if head == nil || head.Next == nil {
return false
}
node := head
fastNode := head.Next
for fastNode != nil && fastNode.Next != nil {
if fastNode == node {
return true
}
fastNode = fastNode.Next.Next
node = node.Next
}
return false
}
func detectCycle( head *ListNode ) *ListNode {
// write code here
if head == nil || head.Next == nil {
return nil
}
node := head
fastNode := head.Next
for fastNode != nil && fastNode.Next != nil {
if fastNode == node {
node1 := head
node2 := node.Next
for node1 != node2 {
node1 = node1.Next
node2 = node2.Next
}
return node1
}
fastNode = fastNode.Next.Next
node = node.Next
}
return nil
}