题目链接
思路:哈希表映射
分析:这里就是要深拷贝这个链表,那么我们可以将老节点对应一个新节点即可。
代码:
class Solution {
public Node copyRandomList(Node head) {
if(head==null){
return head;
}
//新的头节点
Node copyHead = new Node(head.val);
//老节点和新节点的对应关系
HashMap<Node, Node> map = new HashMap<>();
//key:老的节点 val:新的节点
map.put(head,copyHead);
//p遍历老的节点
Node p = head;
//copyp 遍历新的节点
Node copyp = copyHead;
//开始遍历
while(p!=null){
//遍历next节点
if(p.next!=null){
if(!map.containsKey(p.next)){
Node next = new Node(p.next.val);
map.put(p.next,next);
}
copyp.next = map.get(p.next);
}
//遍历随机指针
if(p.random!=null){
if(!map.containsKey(p.random)){
Node random = new Node(p.random.val);
map.put(p.random, random);
}
copyp.random = map.get(p.random);
}
copyp = copyp.next;
p = p.next;
}
return copyHead;
}
}
安静等待。
不打扰是我的温柔。