0
点赞
收藏
分享

微信扫一扫

LeetCode: #138复制带随机指针的链表

沐之轻语 2022-02-06 阅读 32

思路: 利用hash的k-v结构保存原节点和深克隆节点的映射关系

Code:

class Solution {
    public Node copyRandomList(Node head) {
        Node temp = head;
        //创建map结构 k代表原来的节点 v代表深拷贝的节点
        HashMap<Node, Node> map = new HashMap<Node, Node>();
        //设置哨兵 完成深克隆链表的指向任务
        Node dummy = new Node(-1);
        while (temp != null) {
            //创建深拷贝的节点
            Node newNode;
            if(!map.containsKey(temp)) {
                //说明改点还没深拷贝过
                newNode = new Node(temp.val);
                //拷贝之后放到map中
                map.put(temp, newNode);
            } else {
                //map中存在 直接拿
                newNode = map.get(temp);
            }
            dummy.next = newNode;
            if (temp.random != null) {
                Node copyRandom;
                //说明存在随机数指针 需要深拷贝随机数
                if (!map.containsKey(temp.random)) {
                    copyRandom = new Node(temp.random.val);
                    map.put(temp.random, copyRandom);
                } else {
                    //存在直接拿
                    copyRandom = map.get(temp.random);
                }
                //把random赋给 newNode
                newNode.random = copyRandom;
            }
            dummy = newNode;
            //向后遍历
            temp = temp.next;

        }
        //直接返回head节点对应的深克隆节点
        return map.get(head);
        
    }
}

举报

相关推荐

0 条评论