版权声明:我的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解题报告: