力扣题目-复杂链表的复制

基本思路

基本思路就是将新复制的链表的位置和旧链表的位置进行一一对应,这样的话就可以确定旧链表的random指向的位置了。
第一次遍历就是复制一遍新的链表,同时使用map将旧链表的该位置的Node和新链表的该位置的Node进行对应
第二次遍历就是遍历新旧链表,通过旧链表对应位置的Node获得新链表的Node,赋值即可。

代码


/*
// 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 {
    public Node copyRandomList(Node head) {
        Node index = head,newNode = new Node(-1),newIndex = newNode;
        HashMap<Node,Node> map = new HashMap<>();
        while(index != null){
            Node temp = new Node(index.val);
            map.put(index,temp);
            newIndex.next = temp;
            newIndex = newIndex.next;
            index = index.next;
        }
        index = head;
        newIndex = newNode.next;
        while(index != null){
            if(index.random != null){
                newIndex.random = map.get(index.random);
            }else{
                newIndex.random = null;
            }
            newIndex = newIndex.next;
            index = index.next;
        }
        return newNode.next;
    }
}

posted @ 2021-12-01 20:57  Nevesettle  阅读(41)  评论(0编辑  收藏  举报