思路

map临时保存链表结点的映射关系,然后完成随机映射连接

代码

import java.util.*;
public class Solution {
    public RandomListNode Clone(RandomListNode pHead){
        HashMap<RandomListNode,RandomListNode> map=new HashMap<>();
        RandomListNode p=pHead;
        RandomListNode H=new RandomListNode(0);
        RandomListNode p1=H;
        //建立next连接,并且建立原链表结点与新链表结点的映射关系
        while(p!=null){
            RandomListNode temp=new RandomListNode(p.label);
            map.put(p,temp);
            p1.next=temp;
            p=p.next;
            p1=p1.next;
        }
        //建立 random连接
        p=pHead;
        while(p!=null){
            map.get(p).random=map.get(p.random);
            p=p.next;
        }
        return H.next;
    }
}