LeetCode138——复制带随机指针的链表

版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/85911660

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/description/

题目描述:

知识点:哈希表

思路:用一个hashMap来建立原节点和新节点的关系

第一次遍历时:根据label值,用一个hashMap建立原节点和新节点的联系。

第二次遍历时:为新节点添加next指针和random指针。

时间复杂度和空间复杂度均是O(n),其中n为链表中的节点数量。

JAVA代码:

public class Solution {
    private HashMap<RandomListNode, RandomListNode> hashMap = new HashMap<>();
    public RandomListNode copyRandomList(RandomListNode head) {
        if(null == head){
            return null;
        }
        RandomListNode cur = head;
        while(null != cur){
            hashMap.put(cur, new RandomListNode(cur.label));
            cur = cur.next;
        }
        cur = head;
        while(null != cur){
            hashMap.get(cur).next = hashMap.get(cur.next);
            //hashMap.get(cur).next = cur.next; 不能这样写,这样写会导致其next指针指向原节点而不是新节点
            hashMap.get(cur).random = hashMap.get(cur.random);
            //hashMap.get(cur).random = cur.random; 同理,这里也不能这样写
            cur = cur.next;
        }
        return hashMap.get(head);
    }
}

LeetCode解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/85911660