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