当前位置: 首页 > 科技观察

说说复制

时间:2023-03-19 10:39:20 科技观察

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;Mapmap=newHashMap<>();//3.复制每个Node,建立“原节点->新节点”的Map映射while(cur!=null){map.put(cur,newNode(cur.val));cur=cur.next;}cur=head;//4.新链表的next和random指向while(cur!=null){map.get(cur).next=map.get(cur.next);map.get(cur).random=map.get(cur.random);cur=cur.next;}//5.返回新链表的头节点returnmap.get(head);}/***思路:先复制链表的下一个节点,将复制的节点连接到原节点之后,再复制其他*节点,最后取偶数位置的节点(复制节点)。**@paramhead*@return*/publicNodecopyRandomList2(Nodehead){if(head==null)returnnull;Nodenode=newNode(head.val);Nodetemp=node;while(head.next!=null){temp.next=newNode(head.next.val);if(head.random!=null){temp.random=newNode(head.random.val);}head=head.next;temp=temp.next;}returnhead;}??//DefinitionforaNode.classNode{intval;Nodeext;Noderandom;publicNode(intval){this.val=val;this.next=null;this.random=null;}}}参考链接:https://leetcode-cn.com/问题/fu-za-lian-biao-de-fu-zhi-lcof/solution/jian-zhi-offer-35-fu-za-lian-biao-de-fu-zhi-ha-xi-