lc-go/solutions/1/q133/solution.go

40 lines
788 B
Go

// Package q133 implements a solution for https://leetcode.com/problems/clone-graph/
package q133
type Node struct {
Val int
Neighbors []*Node
}
func cloneGraph(node *Node) *Node {
if node == nil {
return nil
}
seen := map[*Node]*Node{}
queue := []*Node{node}
for ; len(queue) > 0; queue = queue[1:] {
cur := queue[0]
if _, ok := seen[cur]; ok {
continue
}
cloned := &Node{
Val: cur.Val,
Neighbors: []*Node{},
}
seen[cur] = cloned
for _, n := range cur.Neighbors {
if nCloned, ok := seen[n]; ok {
// Link
cloned.Neighbors = append(cloned.Neighbors, nCloned)
nCloned.Neighbors = append(nCloned.Neighbors, cloned)
} else {
// Add to queue
queue = append(queue, n)
}
}
}
return seen[node]
}
var _ = cloneGraph