剑指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;
    }
}
经验分享 程序员 微信小程序 职场和发展