剑指 Offer 35. 复杂链表的复制
思路:
1)将原链表的每个节点直接用map存储起来,KEY:原链表的地址值 VALUE:新建Node 节点
2)再遍历一次原链表,建立Node节点的关系。
class Solution {
public Node copyRandomList(Node head) {
if(head == null) return head;
Node e =head;
Map<Node,Node> map = new HashMap<>();
while(e!= null){
int val = e.val;
Node node = new Node(val);
map.put(e,node); // 第一次遍历 存储节点
// System.out.println(e);
e = e.next;
}
e = head ;
while(e.next != null){
Node newL = map.get(e);
newL.next = map.get(e.next); // 通过map获得节点并建立联系
if(e.random != null)newL.random = map.get(e.random); // 注意可能会指向null 这里需要特殊判断
else newL.random = null;
e = e.next;
}
Node newL = map.get(e);
if(e.random != null)newL.random = map.get(e.random);
else newL.random = null;
return map.get(head);
}
}