Leetcode:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof“GitHub:https://gitee.com/nateshao/leetcode/blob/main/algo-notes/src/main/java/com/nateshao/sword_offer/topic_28_copyRandomList/Solution.javaCopyingalinkedlist》题目描述:请实现copyRandomList函数来复制一个复杂的链表。在一个复杂的链表中,每个节点都有一个指向下一个节点的next指针,和一个指向链表中任意节点或null的随机指针难度:中等例1:输入:head=[[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例2:输入:head=[[1,1],[2,1]]输出:[[1,1],[2,1]]示例3:输入:head=[[3,null],[3,0],[3,null]]输出:[[3,null],[3,0],[3,null]]示例4:输入:head=[]输出:[]解释:给定链表为空(空指针),所以返回null。提示:10000<=Node.val<=10000Node.random为空(null)或指向链表中的一个节点。节点的ber不超过1000方法:哈希表》利用哈希表的查询特性,考虑构造原链表节点与新链表对应节点的键值对映射关系,然后遍历新链表中每个节点的下一个和随机参考点。算法流程:如果头节点head为空节点,直接返回null;初始化:哈希表dic,节点cur指向头节点;复制链表:新建一个节点,在dic中添加键值对(原cur节点,新cur节点);cur遍历到原链表的下一个节点;构造新链表的参考点:构造新节点|点的下一个和随机弓;cur遍历到原链表的下一个节点;返回值:新链表的头节点dic[cur];复杂度分析:时间复杂度O(N):两轮遍历链表,使用O(N)时间。空间复杂度0(N):哈希表dic使用线性大小的额外空间。packagecom.nateshao.sword_offer.topic_28_copyRandomList;导入java。效用。哈希表;导入java。.cn*@bloghttps://nateshao.gitee.io*@GitHubhttps://github.com/nateshao*@Giteehttps://gitee.com/nateshao*说明:复链表复制*/publicclassSolution{/***精选答案*@paramhead*@return*/publicNodecopyRandomList(Nodehead){if(head==null)returnnull;Nodecur=head;Map
