剑指 Offer 35. 复杂链表的复制

剑指 Offer 35. 复杂链表的复制

Offer_35

题目详情

方法一

  • 可以使用一个HashMap来存储旧结点和新结点的映射。
  • 这种方法需要遍历链表两遍,因为需要首先知道映射关系才能求出next和random结点。
package com.walegarrett.offer;

import java.util.Comparator;
import java.util.HashMap;
import java.util.TreeSet;

/**
 * @Author WaleGarrett
 * @Date 2021/2/1 20:46
 */
// Definition for a Node.
class Node {
    int val;
    Node next;
    Node random;

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

    public Node copyRandomList(Node head) {
        HashMap<Node, Node> map = new HashMap<>();
        Node current = head;
        while(current != null){
            map.put(current, new Node(current.val));
            current = current.next;
        }
        current = head;
        while(current != null){
            map.get(current).next = map.get(current.next);
            map.get(current).random = map.get(current.random);
            current = current.next;
        }
        return map.get(head);
    }
}
posted @ 2021-02-03 23:11  Garrett_Wale  阅读(42)  评论(0编辑  收藏  举报