原题网址:https://leetcode.cn/problems/copy-list-with-random-pointer/submissions/
给一个链表,对该链表进行深拷贝。
使用map保存拷贝;那么就可以得当前节点next,random的拷贝节点;再组织其关系;
// 和深克隆图的思路相似,map中保存副本,
// 两次遍历,第一次遍历组成链表,第二次遍历在整理随机指针
public Node copyRandomList(Node head) {
Map<Node,Node> map = new HashMap<>();
Node cur = head;
while(cur != null) {
map.put(cur, new Node(cur.val));
cur = cur.next;
}
cur = head;
while(cur != null) {
// 当前节点关联的节点
Node next = cur.next;
Node random = cur.random;
// 得到关联节点的拷贝节点;
// 在组织其关系;
Node copy = map.get(cur);
copy.next = map.get(next);
copy.random = map.get(random);
cur = cur.next;
}
return map.get(head);
}