Leetcode第五天之复制带随机指针的链表(138)

   日期:2020-11-09     浏览:92    评论:0    
核心提示:新建Node实体类public class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}哈希表 public static Node copyRandomList(Node head) { ..


新建Node实体类

public class Node { 
    int val;
    Node next;
    Node random;

    public Node(int val) { 
        this.val = val;
        this.next = null;
        this.random = null;
    }
}

哈希表

    public static Node copyRandomList(Node head) { 
                if (head==null)
            return null;
        //哈希表中,key是原来的节点,value是现在的
        Map<Node,Node> hashMap=new HashMap<>();
        Node p=head;
        //将原节点放入哈希表中
        while (p!=null){ 
            Node newNode=new Node(p.val);
            hashMap.put(p,newNode);
            p=p.next;
        }
        p=head;
        //遍历原链表,设置新节点的next和random
        while (p!=null){ 
            //p是原节点,get(p)就是新的节点
            Node newNode=hashMap.get(p);
            if(p.next!=null){ 
                newNode.next=hashMap.get(p.next);
            }
            //p.random表示原节点随机指向
            //hashMap中:
            // hashMap.get(p.random)表示hashMap.get(p)对应的新节点
            if (p.random!=null){ 
                newNode.random=hashMap.get(p.random);
            }
            p=p.next;
        }
        //返回原节点对应的新节点
        return hashMap.get(head);
    }

我有点懵逼,为什么是0ms,显示通过了,我一度怀疑是不是没执行,提交了好几次。头一次看到100%,难以言语。

哈希表与链表

  • 先将原节点放入哈希表中,map.put(p,newNode);
  • 再通过哈希表中原新节点,设置新的指向
  • newNode.next = map.get(p.next);
  • newNode.random = map.get(p.random);
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服