138. Copy List with Random Pointer**
https://leetcode.com/problems/copy-list-with-random-pointer/
题目描述
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
The Linked List is represented in the input/output as a list of n
nodes. Each node is represented as a pair of [val, random_index]
where:
-
val
: an integer representingNode.val
-
random_index
: the index of the node (range from0
ton-1
) where random pointer points to, ornull
if it does not point to any node.
Example 1:
Example 2:
Example 3:
Example 4:
Constraints:
-
-10000 <= Node.val <= 10000
-
Node.random
isnull
or pointing to a node in the linked list. - Number of Nodes will not exceed 1000.
C++ 实现 1
这道题感觉做了好多遍, 好像 “剑指Offer” 上也有这道题. 思路是: 访问链表中的每个节点 root
, 产生一个值相同的新节点 p
, 同时保存 root -> p
的映射关系, 在这一步不考虑 random
, 只考虑 next
. 这样就可以重建一个新的链表, 但 random
还没有指向正确的节点.
下一步遍历新链表, 通过映射关系更新新链表中的 random
的最终指向.