lc-go/solutions/1/q133/solution.go
2026-01-07 18:04:39 +09:00

39 lines
703 B
Go

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