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

35 lines
590 B
Go

// Package q138 implements a solution for https://leetcode.com/problems/copy-list-with-random-pointer/
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