剑指Offer 牛客 JZ25 复杂链表的复制
题目: 思路: 题目要求深拷贝,那就不用用另外的指针指向原引用了,必须有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; } }