package top100liked // https://leetcode.cn/problems/copy-list-with-random-pointer/?envType=study-plan-v2&envId=top-100-liked type Node struct { Val int Next *Node Random *Node } func copyRandomList(head *Node) *Node { if head == nil { return nil } m := make(map[*Node]*Node) cur := head var first *Node // 新旧节点映射 for cur != nil { newNode := &Node{ Val: cur.Val, Next: nil, Random: nil, } if first == nil { first = newNode } m[cur] = newNode cur = cur.Next } cur = head for cur != nil { if cur.Next != nil { m[cur].Next = m[cur.Next] } if cur.Random != nil { m[cur].Random = m[cur.Random] } cur = cur.Next } return first }