package q138 type Node struct { Val int Next *Node Random *Node } func copyRandomList(head *Node) *Node { idx := make(map[*Node]*Node, 256) p := head for p != nil { newNode := *p // copy idx[p] = &newNode p = p.Next } p = head for p != nil { newNode := idx[p] if newNode.Next != nil { newNode.Next = idx[newNode.Next] } if newNode.Random != nil { newNode.Random = idx[newNode.Random] } p = p.Next } return idx[head] } var _ = copyRandomList