[LeetCode]138. 复制带随机指针的链表

题解

方法一:hashmap构造旧节点和新节点的映射关系,为新节点next、random指针赋值。
方法二(空间复杂度更优):把新节点连接到对应旧节点后面,为新节点random指针赋值,把新节点拆出来连到新链表。

代码

方法一

class Solution {
    public Node copyRandomList(Node head) {
        if(head==null){
            return null;
        }

        Node p=head;
        Map<Node,Node> map=new HashMap<>();
        while(p!=null){
            map.put(p,new Node(p.val));
            p=p.next;
        }

        p=head;
        while(p!=null){
            Node pNew=map.get(p);

            if(p.next!=null){
                pNew.next=map.get(p.next);
            }
            if(p.random!=null){
                pNew.random=map.get(p.random);
            }

            p=p.next;
        }

        return map.get(head);
    }
}

posted on 2020-10-27 19:42  coding_gaga  阅读(58)  评论(0编辑  收藏  举报

导航