借助结构 Map<RandomListNode,RandomListNode>
key为old链表的Node ,value为new链表的Node
第一遍建立节点
第二遍建立节点之间的next和random关系
import java.util.*; public class Solution { public RandomListNode Clone(RandomListNode pHead){ if(pHead==null) return null; RandomListNode bakHead = pHead; Map<RandomListNode,RandomListNode> map = new HashMap<>(); //第一遍建立节点 while(pHead!=null){ map.put(pHead,new RandomListNode(pHead.label)); pHead = pHead.next; } //指针回到头节点 pHead = bakHead; //第二遍建立节点之间的next和random关系 while(pHead!=null){ map.get(pHead).next=map.get(pHead.next); map.get(pHead).random = map.get(pHead.random); pHead = pHead.next; } //返回新链表的头节点 return map.get(bakHead); }
}