请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
/*
// Definition for a Node.
class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
*/
/**
法1:用hashMap来维护
*/
class Solution {
public Node copyRandomList(Node head) {
if(head == null)
return null;
HashMap<Node,Node> hs = new HashMap<Node,Node>();
Node curr = head;
while(curr != null){
hs.put(curr,new Node(curr.val));
curr = curr.next;
}
curr = head;
while(curr != null){
hs.get(curr).next = hs.get(curr.next);
hs.get(curr).random = hs.get(curr.random);
curr = curr.next;
}
return hs.get(head);
}
}