力扣题目-复杂链表的复制
基本思路
基本思路就是将新复制的链表的位置和旧链表的位置进行一一对应,这样的话就可以确定旧链表的random指向的位置了。
第一次遍历就是复制一遍新的链表,同时使用map将旧链表的该位置的Node和新链表的该位置的Node进行对应
第二次遍历就是遍历新旧链表,通过旧链表对应位置的Node获得新链表的Node,赋值即可。
代码
/*
// 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;
}
}
*/
class Solution {
public Node copyRandomList(Node head) {
Node index = head,newNode = new Node(-1),newIndex = newNode;
HashMap<Node,Node> map = new HashMap<>();
while(index != null){
Node temp = new Node(index.val);
map.put(index,temp);
newIndex.next = temp;
newIndex = newIndex.next;
index = index.next;
}
index = head;
newIndex = newNode.next;
while(index != null){
if(index.random != null){
newIndex.random = map.get(index.random);
}else{
newIndex.random = null;
}
newIndex = newIndex.next;
index = index.next;
}
return newNode.next;
}
}