34 lines
487 B
Go
34 lines
487 B
Go
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
|