给定一个链表,判断链表中是否有环。
如果链表中存在某个节点,可以通过连续跟踪next指针再次到达该节点,则链表中存在环。
如果链表中存在环,则返回true,否则返回false。
package main
import (
"fmt"
)
type Node struct{
val int
next *Node
}
type void struct{}
func hasCycle(head *Node)bool{
set := map[Node]void{}
for head!=nil{
_, ok := set[*head]
if ok{
// 已经存在了一个相同的Node
return true
}
// 此Node在set中不存在
set[*head] = void{}
head = head.next
}
return false
}
func main(){
node5 := Node{5, nil}
node4 := Node{4, &node5}
node3 := Node{3, &node4}
node2 := Node{2, &node3}
node1 := Node{1, &node2}
node5.next = &node3
fmt.Println(hasCycle(&node1))
}
- 使用双指针
func hasCycle2(head *Node)bool{
if head==nil||head.next==nil{
return false
}
slow := head
quick := head.next
for slow!=quick{
if quick==nil||quick.next==nil{
return false
}
slow = slow.next
quick = quick.next.next
}
return true
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。