/** * Definition for a Node. * type Node struct { * Val int * Next *Node * Random *Node * } */func copyRandomList(head *Node) *Node { var ( cur = head res *Node node *Node ) // A -> A' -> B -> B' -> nil for cur != nil { node = &Node{ Val: cur.Val, Next: cur.Next, } if res == nil { res = node } cur.Next = node cur = node.Next } // 调整 Random cur = head for cur != nil { node = cur.Next if cur.Random != nil { node.Random = cur.Random.Next } cur = node.Next } // 分离 A 和 A' cur = head for cur != nil { node = cur.Next cur.Next = node.Next if cur.Next != nil { node.Next = cur.Next.Next } cur = cur.Next } return res}