2023-9-26 JZ 复杂链表的复制

题目链接:复杂链表的复制

2023-9-26 JZ 复杂链表的复制_第1张图片

import java.util.*;
/*
public class RandomListNode {
    int label;
    RandomListNode next = null;
    RandomListNode random = null;

    RandomListNode(int label) {
        this.label = label;
    }
}
*/
public class Solution {
    public RandomListNode Clone(RandomListNode head) {
        if (head == null) return head;

        RandomListNode res = new RandomListNode(-1);
        // 哈希表,key为原始链表的节点,value为原始链表节点的拷贝节点
        HashMap<RandomListNode, RandomListNode> mp = new HashMap<>();

        RandomListNode cur = head;
        RandomListNode pre = res;
        while(cur != null)
        {
            // 拷贝节点
            RandomListNode copy = new RandomListNode(cur.label);
            mp.put(cur, copy);
            pre.next = copy;
            cur = cur.next;
            pre = pre.next;
        }

        // 遍历哈希表,建立random关系
        for(HashMap.Entry<RandomListNode, RandomListNode> entry: mp.entrySet())
        {
            if(entry.getKey().random == null) entry.getValue().random = null;

            else entry.getValue().random = mp.get(entry.getKey().random);
        }
        return res.next;

    }
}

你可能感兴趣的:(链表,数据结构)