Copyalinkedlistwithrandompointers或一个空节点。构造此链表的深层副本。一个深拷贝应该恰好包含n个全新的节点,其中每个新节点的值都设置为其对应的原始节点的值。新节点的next指针和随机指针也应该指向复制链表中的新节点,这样原链表和复制链表中的这些指针就可以表示相同的链表状态。复制链表中的指针不应指向原链表中的节点。例如,如果原始链表中有两个节点X和Y,其中X.random-->Y。那么复制链表中对应的两个节点x和y也有x.random-->y。返回复制列表的头节点。输入/输出中的链表由n个节点的链表表示。每个节点由一个[val,random_index]表示:val:表示Node.val的整数。random_index:随机指针指向的节点的索引(取值范围为0到n-1);如果它不指向任何节点,则为null。你的代码只接受原链表的头节点head作为传入参数。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:链表遍历首先,如果链表为空,直接返回。否则,依次遍历链表,用一个HashMap存储旧节点和复制节点的映射关系。遍历过程如下:如果当前节点已经被复制,则从mappings中取出;否则,复制一份;判断当前节点是否有随机指针,判断复制了当前节点的随机指针,从mappings中取出;否则,复制一份。最后,返回副本的链表。importcom.kaesar.leetcode.RandomNode;importjava.util.HashMap;importjava.util.Map;publicclassLeetCode_138{publicstaticRandomNodecopyRandomList(RandomNodehead){if(head==null){返回头;}//key为旧节点,value为新节点Mapmappings=newHashMap<>();RandomNodenewHead=newRandomNode(-1);随机节点cur=newHead;//遍历原链表while(head!=null){//如果当前节点已经复制,则从mappings中取出;否则复制一个if(mappings.containsKey(head)){cur.next=mappings.get(head);}else{cur.next=newRandomNode(head.val);mappings.put(head,cur.next);}//如果当前节点的random已经被复制,则从mappings中取出;否则复制一个}else{RandomNoderandomNode=newRandomNode(head.random.val);cur.next.random=randomNode;mappings.put(head.random,cur.next.random);}}head=head.next;cur=cur.next;}返回newHead.next;}publicstaticvoidmain(String[]args){RandomNodehead=newRandomNode(7);RandomNodeone=newRandomNode(13);RandomNode二=newRandomNode(11);RandomNode三=newRandomNode(10);RandomNode四=newRandomNode(1);head.next=one;head.random=null;一个.下一个=两个;one.random=头;二.下一个=三;二.随机=四;三.下一个=四;三.随机=二;四.下一个=空;四.随机=头;System.out.println("复制之前的链接");随机节点cur=head;while(cur!=null){System.out.println("val:"+cur.val+"|next:"+(cur.next==null?"null":cur.next.val)+"|random:"+(cur.random==null?"null":cur.random.val));cur=cur.next;}RandomNoderesult=copyRandomList(head);System.out.println("复制后的链表");随机节点newCur=结果;while(newCur!=null){System.out.println("val:"+newCur.val+"|next:"+(newCur.next==null?"null":newCur.next.val)+"|随机:"+(newCur.random==null?"null":newCur.random.val));newCur=newCur.next;}}}[每日寄语]年轻的朋友们,当你发现自己专业的自己走在一条行不通的路上时,不要拒绝其他的方向,因为很多时候,是你不熟悉的路带给你光明