题目:
题目链接
思路:
题目要求深拷贝,那就不用用另外的指针指向原引用了,必须有new RandomListNode()
思考如何保存原链表节点顺序信息。我个人对原题目的理解:不确定有没有下面这种情况
无论怎么样,都需要保存原链表节点顺序信息,联想到HashMap,key为原引用,value为新节点
用HashMap的一个好处,因为每个节点的唯一性,所以每个节点引用也是唯一的,当next,random指向同一节点的时候,保存节点顺序信息时不会有重复项
代码:
public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
if(pHead == null){
return null;
}
//新头节点
RandomListNode newHead = new RandomListNode(pHead.label);
//新头节点的辅助指针
RandomListNode rnl = newHead;
//原头节点辅助指针
RandomListNode oldHead = pHead;
HashMap<RandomListNode, RandomListNode> hm = new HashMap<>();
//保存原链表节点顺序信息
while(oldHead != null){
hm.put(oldHead, new RandomListNode(oldHead.label));
oldHead = oldHead.next;
}
oldHead = pHead;
while(oldHead != null){
rnl.next = hm.get(oldHead.next);
rnl.random = hm.get(oldHead.random);
rnl = rnl.next;
oldHead = oldHead.next;
}
return newHead;
}
}