剑指offer35

剑指offer35:复制复杂链表
public Node copyRandomList(Node head) {
        if(head==null){
            return null;
        }

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

         cur=head;
         while(cur!=null){
             map.get(cur).next=map.get(cur.next);
             map.get(cur).random=map.get(cur.random);
             cur=cur.next;
         }

         return map.get(head);
        
    }
题解:通过哈希表,进行二次遍历
当第一次遍历时,将链表中的对象放入到map中生成副本
然后进行第二次遍历,将原先的对象的next指针域赋给副本的对象
将原先的对象的random域赋给副本的random域
这就完成了复杂连边的复制
时间复杂度:O(n)
空间复杂度:O(n)

全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务