当前位置: 首页 > news >正文

微软做网站一站式自媒体服务平台

微软做网站,一站式自媒体服务平台,传奇游戏电脑版,彩票类网站怎么做推广随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点…

随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。

例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

返回复制链表的头节点。

用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:

  • val:一个表示 Node.val 的整数。
  • random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。

你的代码 只 接受原链表的头节点 head 作为传入参数。

示例 1:
在这里插入图片描述
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

解题思路

  • 使用哈希表来存储原链表节点和复制链表节点的对应关系。

  • 第一次遍历:创建新节点并构建原链表节点和新节点的映射关系。同时,复制节点的 val 值和 next 指针。

  • 第二次遍历:根据原链表的 random 指针,为复制链表的对应节点设置 random 指针。

java实现

class Node {int val;Node next;Node random;public Node(int val) {this.val = val;this.next = null;this.random = null;}
}public class DeepCopyLinkedList {public Node copyRandomList(Node head) {if (head == null) {return null;}// 第一次遍历:创建新节点并构建原链表节点和新节点的映射关系Map<Node, Node> map = new HashMap<>();Node current = head;while (current != null) {map.put(current, new Node(current.val));current = current.next;}// 第二次遍历:根据原链表的 random 指针,为复制链表的对应节点设置 random 指针current = head;while (current != null) {Node copyNode = map.get(current);copyNode.next = map.get(current.next);copyNode.random = map.get(current.random);current = current.next;}return map.get(head);}public static void main(String[] args) {// 构造链表 1 -> 2 -> 3 -> 4 -> 5Node head = new Node(1);head.next = new Node(2);head.next.next = new Node(3);head.next.next.next = new Node(4);head.next.next.next.next = new Node(5);// 设置 random 指针head.random = head.next.next;  // 1.random --> 3head.next.random = head.next.next.next;  // 2.random --> 4head.next.next.random = head;  // 3.random --> 1head.next.next.next.random = null;  // 4.random --> nullhead.next.next.next.next.random = head.next;  // 5.random --> 2// 调用 copyRandomList 方法进行深拷贝DeepCopyLinkedList solution = new DeepCopyLinkedList();Node copiedHead = solution.copyRandomList(head);// 打印复制链表while (copiedHead != null) {System.out.print("[" + copiedHead.val +", " + (copiedHead.random != null ? copiedHead.random.val : "null") +"] ");copiedHead = copiedHead.next;}// 输出:[1, 3] [2, 4] [3, 1] [4, null] [5, 2]}
}

时间空间复杂度

  • 时间复杂度:O(n),其中 n 是链表的长度。
  • 空间复杂度:O(n),需要额外的空间存储新节点
http://www.yidumall.com/news/105546.html

相关文章:

  • 哪个公司做公司网站好重庆seo研究中心
  • 河南省网站制作公司seo排名优化工具推荐
  • 聊城网站推广品牌全网关键词云查询
  • 网站做任务佣金东莞网络优化哪家好
  • 网站与云平台区别网站关键词优化多少钱
  • 网站网站制作网站天津seo排名效果好
  • 哈尔滨做网站公司有哪些中国重大新闻
  • 上海网站建设天锐科技昆明长尾词seo怎么优化
  • 网站网页的书签怎么做武汉企业seo推广
  • 免费网站建设itcask自媒体
  • 公司网站建设计入明细科目网络推广的渠道
  • 用帝国cms做门户网站windows优化大师是哪个公司的
  • 泰塔科技网站建设苏州seo网站系统
  • 常州制作网站抖音seo培训
  • 自己搭建的ftp怎么做网站广州广告公司
  • 自己做微信电影网站怎么做对百度竞价排名的看法
  • 做同城相亲网站知识搜索引擎
  • 怎么做类似淘宝的网站百度网页版链接地址
  • 淮北网站建设求职简历seo优化中商品权重主要由什么决定
  • 网站优化新闻湛江今日头条
  • 手工制作风筝外链seo招聘
  • 专业的建网站的公司网站搜索排名优化怎么做
  • 搭建电商平台 方案重庆高端seo
  • 马云的网站怎么做的seo网络推广优势
  • 免费安全百度seo排名优化软件分类
  • 做平面资源比较好的网站谷歌google官网下载
  • wordpress iis7伪静态绍兴seo排名
  • 国家发改委网站吉抚武温铁路建设颜色广告
  • 怎么给公司做个网站太原seo外包服务
  • 卓企做的网站怎么样徐州seo建站