LeetCode—剑指Offer:复杂链表的复制(HashMap)

复杂链表的复制(中等)

2020年9月3日

题目来源:力扣

在这里插入图片描述
在这里插入图片描述
解题

利用HashMap来复制,必须首先复制值,再复制关系,否则指针会指向混乱。

/*
// 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;
    }
}
*/
class Solution {
    
     //HashMap实现
    public Node copyRandomList(Node head) {
    
    
        //定义一个map,用来存放新的链表
        Map<Node,Node> map=new HashMap<>();
        //虚假头节点
        Node node=head;
        //遍历链表,先存放数值
        while(node!=null){
    
    
            map.put(node,new Node(node.val));
            node=node.next;
        }
        //再从头开始
        node=head;
        //遍历链表,添加关系
        while(node!=null){
    
    
            map.get(node).next=map.get(node.next);
            map.get(node).random=map.get(node.random);
            node=node.next;
        }
        return map.get(head);
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41541562/article/details/108354570