首页 > 编程语言 >golang算法-判断链表是否有环

golang算法-判断链表是否有环

时间:2022-11-22 11:39:16浏览次数:43  
标签:Node golang nil Insert next 链表 有环 var


前言

链表有环,体现为:
A->B->C->D->B …

分析

  • 需要将遍历过的节点存入map,以址为key,空struct为值
  • 遍历时,当前节点是否已存在,存在即有环。

实现

链表

// 链表的长度,不包过头
type Node struct {
Next *Node
Data int
}
type LinkList struct {
Header *Node
}

func NewLinkList() *LinkList {
return &LinkList{
Header: &Node{
Next: nil,
Data: 0,
},
}
}

func (l *LinkList) HasRing() bool{
var trace = make(map[*Node]struct{}, 0)
var next = l.Header.Next
for next != nil {
trace[next] = struct{}{}

next = next.Next

if _, ok := trace[next]; ok {
return true
}
}
return false
}

// 判断链表是否有环
// 输出true
func TestLinkHasRing(t *testing.T) {
var node1 = &Node{nil, 1}
var node2 = &Node{nil, 2}
var node3 = &Node{nil, 3}
var node4 = &Node{nil, 4}
var node5 = &Node{nil, 5}
l := NewLinkList()
l.Insert(node1).Insert(node2).Insert(node3).Insert(node4).Insert(node5)
node5.Next = node2

fmt.Println(l.HasRing())
}


标签:Node,golang,nil,Insert,next,链表,有环,var
From: https://blog.51cto.com/u_11553781/5877236

相关文章