剑指 offer 35 复杂链表的复制(双百,深拷贝,利用HashMap分别复制)

 

1 题目描述

剑指 offer 35 复杂链表的复制(双百,深拷贝,利用HashMap分别复制)_第1张图片

 

2 算法思路

思路:

  • 这个题,主要需要处理两个指针的复制
  • 可以先用一个HashMap,复制节点值,然后以 key = 节点, val =new Node(cur,val) 的方式存储
  • 然后再复制节点的next 和 random 指针

算法:

  1. 创建一个hashmap
  2. 然后循环的创建复制链表的结点node,将值复制进去,并以 key = 节点, val = new Node(cur,val)  的方式存储在hashmap中
  3. 然后在遍历链表,复制结点的指针,next 和 random
    1. next : map.get(cur).next = map.get(cur.next);
    2. random : map.get(cur).random = map.get(cur.random);
  4. 最后返回map中 key = 头节点head  的结点

 

3 代码

class Solution {
    public Node copyRandomList(Node head) {
        HashMap 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); //复制next
            map.get(cur).random = map.get(cur.random);  //复制random
            cur = cur.next;
        }
        return map.get(head);
    }
}

4 提交结果

剑指 offer 35 复杂链表的复制(双百,深拷贝,利用HashMap分别复制)_第2张图片

 

 

 

你可能感兴趣的:(剑指 offer 35 复杂链表的复制(双百,深拷贝,利用HashMap分别复制))