美文网首页
[刷题防痴呆] 0138 - 复制带随机指针的链表 (Copy

[刷题防痴呆] 0138 - 复制带随机指针的链表 (Copy

作者: 西出玉门东望长安 | 来源:发表于2021-12-21 02:09 被阅读0次

    题目地址

    https://leetcode.com/problems/copy-list-with-random-pointer/

    题目描述

    138. Copy List with Random Pointer
    
    A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
    
    Return a deep copy of the list.
    
    The Linked List is represented in the input/output as a list of n nodes. Each node is represented as a pair of [val, random_index] where:
    
    val: an integer representing Node.val
    random_index: the index of the node (range from 0 to n-1) where random pointer points to, or null if it does not point to any node.
     
    
    Example 1:
    
    
    Input: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
    Output: [[7,null],[13,0],[11,4],[10,2],[1,0]]
    Example 2:
    
    
    Input: head = [[1,1],[2,1]]
    Output: [[1,1],[2,1]]
    Example 3:
    
    
    
    Input: head = [[3,null],[3,0],[3,null]]
    Output: [[3,null],[3,0],[3,null]]
    Example 4:
    
    Input: head = []
    Output: []
    Explanation: Given linked list is empty (null pointer), so return null.
    

    思路

    • hashmap.
    • 递归. copy next 和 copy random.
    • 递归脱出, null.

    关键点

    • 注意, 递归前先map.put(head, node).

    代码

    • 语言支持:Java
    /*
    // 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 {
        
        Map<Node, Node> map = new HashMap<>();
        
        public Node copyRandomList(Node head) {
            if (head == null) {
                return null;
            }
            
            if (map.containsKey(head)) {
                return map.get(head);
            }
            
            Node node = new Node(head.val);
            map.put(head, node);
            
            node.next = copyRandomList(head.next);
            node.random = copyRandomList(head.random);
            
            return node;
        }
    }
    

    相关文章

      网友评论

          本文标题:[刷题防痴呆] 0138 - 复制带随机指针的链表 (Copy

          本文链接:https://www.haomeiwen.com/subject/mstufrtx.html