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

网站ftp密码茶文化网站制作

网站ftp密码,茶文化网站制作,广州番禺天气,建设网站西安目录 题目 方法1#xff1a;错误的方法#xff08;初尝试#xff09; 方法2#xff1a;复制、拆开 方法3#xff1a;哈希表 总结 题目 请实现 copyRandomList 函数#xff0c;复制一个复杂链表。在复杂链表中#xff0c;每个节点除了有一个 next 指针指向下一个节…目录 题目 方法1错误的方法初尝试 方法2复制、拆开 方法3哈希表 总结 题目 请实现 copyRandomList 函数复制一个复杂链表。在复杂链表中每个节点除了有一个 next 指针指向下一个节点还有一个 random 指针指向链表中的任意节点或者 null。 题目地址剑指 Offer 35. 复杂链表的复制 - 力扣LeetCode 或同题138. 复制带随机指针的链表 - 力扣LeetCode  方法1错误的方法初尝试 思路 1.先通过递归 创建新链表每个节点的val 和 next 与旧的链表对应关系相同 2.再通过 原链表中每个节点的random的val 来找到新链表中每个节点的random的指向 这种方法是错误的方法可以直接去看后面的方法只是作者刚开始的尝试错误的原因在于每个节点的val不是唯一的这样的话你第2步用val来复制每个节点的random是不可以的有些示例会过不去。 例如 输入head [[7,null],[13,0],[11,4],[10,2],[1,0]] 那么第1步的结果是newNode   [[7,null],[13,null],[11,null],[10,null],[1,null]] 然后 第2步就是对每个节点的 random进行指向。 代码 class Solution {public Node copyRandomList(Node head) {//复制节点的val、nextNode newNode copy(head);Node p1 head;Node p2 newNode;//复制节点的 randomwhile (p1 ! null) {if (p1.random ! null) {int val p1.random.val;p2.random findNode(val,newNode);}p1 p1.next;p2 p2.next;}return newNode;}/*** 复制 Node 的 val 和 next*/Node copy(Node oldNode) {if (oldNode null) return null;Node newNode new Node(oldNode.val);newNode.next copy(oldNode.next);return newNode;}/*** 找到某个节点他属于head并且val 是 val*/Node findNode(int val,Node head){if (head null)return null;Node p head;while (p!null){if (p.val val)return p;p p.next;}return null;} }方法2复制、拆开 思路来自 作者王尼玛链接https://leetcode.cn/problems/copy-list-with-random-pointer/solutions/295083/liang-chong-shi-xian-tu-jie-138-fu-zhi-dai-sui-ji-/来源力扣LeetCode著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。 第一步根据遍历到的原节点创建对应的新节点每个新创建的节点是在原节点后面比如下图中原节点1不再指向原原节点2而是指向新节点1 第二步是最关键的一步用来设置新链表的随机指针 上图中我们可以观察到这么一个规律 原节点1的随机指针指向原节点3新节点1的随机指针指向的是原节点3的next 原节点3的随机指针指向原节点2新节点3的随机指针指向的是原节点2的next 也就是原节点i的随机指针(如果有的话)指向的是原节点j 那么新节点i的随机指针指向的是原节点j的next 第三步就简单了只要将两个链表分离开再返回新链表就可以了 代码 class Solution {public Node copyRandomList(Node head) {if(headnull) {return null;}Node p head;//第一步在每个原节点后面创建一个新节点//1-1-2-2-3-3while(p!null) {Node newNode new Node(p.val);newNode.next p.next;p.next newNode;p newNode.next;}p head;//第二步设置新节点的随机节点while(p!null) {if(p.random!null) {p.next.random p.random.next;}p p.next.next;}//第三步将两个链表分离注意这里是分离不能修改原来的链表Node res new Node(-1);Node oldNode head;Node newNode res;while (oldNode!null){newNode.next oldNode.next;newNode newNode.next;oldNode.next newNode.next;oldNode oldNode.next;}return res.next;} } 方法3哈希表 思路 思路来自 作者王尼玛链接https://leetcode.cn/problems/copy-list-with-random-pointer/solutions/295083/liang-chong-shi-xian-tu-jie-138-fu-zhi-dai-sui-ji-/来源力扣LeetCode著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。 我们用哈希表来解决这个问题 首先创建一个哈希表再遍历原链表遍历的同时再不断创建新节点 我们将原节点作为key新节点作为value放入哈希表中 第二步我们再遍历原链表这次我们要将新链表的next和random指针给设置上 从上图中我们可以发现原节点和新节点是一一对应的关系所以 map.get(原节点)得到的就是对应的新节点map.get(原节点.next)得到的就是对应的新节点.nextmap.get(原节点.random)得到的就是对应的新节点.random 所以我们只需要再次遍历原链表然后设置 新节点.next - map.get(原节点.next) 新节点.random - map.get(原节点.random) 这样新链表的next和random都被串联起来了 最后我们然后map.get(head)也就是对应的新链表的头节点就可以解决此问题了。 代码 class Solution {public Node copyRandomList(Node head) {if(headnull) {return null;}//创建一个哈希表key是原节点value是新节点MapNode,Node map new HashMapNode,Node();Node p head;//将原节点和新节点放入哈希表中while(p!null) {Node newNode new Node(p.val);map.put(p,newNode);p p.next;}p head;//遍历原链表设置新节点的next和randomwhile(p!null) {Node newNode map.get(p);//p是原节点map.get(p)是对应的新节点p.next是原节点的下一个//map.get(p.next)是原节点下一个对应的新节点if(p.next!null) {newNode.next map.get(p.next);}//p.random是原节点随机指向//map.get(p.random)是原节点随机指向 对应的新节点 if(p.random!null) {newNode.random map.get(p.random);}p p.next;}//返回头结点即原节点对应的value(新节点)return map.get(head);} } 总结 最好的方法我觉得还是方法3这个方法不仅思路简单代码也简单。方法2虽然思路简单但是写代码不好写所以要多去想哈希表原来哈希表的key 和 value 可以分别存放两个链表所以以后看到复杂链表的复制要去想用哈希表来复制。
http://wiki.neutronadmin.com/news/302583/

相关文章:

  • wordpress如何网站顶部右侧广告cpa推广联盟平台
  • 网站变慢的原因想学网页设计报考什么专业
  • 有哪些网页游戏网站十大营销咨询公司
  • 想制作自己的网站吗信阳高端网站建设
  • 专业网站建设机构广告联盟接广告
  • 建立网站站点的过程wordpress 提示要安装插件
  • 珠海网站定制开发关键词推广优化app
  • 买了个域名 如何建网站做网站搜爬闪
  • 建设手机银行网站谁专门做网站安全维护
  • 杭州做营销型网站网站建设与设计开题报告
  • 国外做家居类的网站南宁伯才网络
  • 做一个手机网站多少钱旅游景点网站建设规划书
  • 杭州企业建站程序免费国外代理网页
  • 漆包线 东莞网站建设自学编程网站
  • 免费淘宝网站建设天水做网站
  • 广东省住房城乡建设厅门户网站3d建模视频教学
  • 一般门户网站用r做简易的网站
  • 网站受众群体海兴县做网站价格
  • 做团购网站需要注册哪些商标怎么对自己的网页进行修改
  • html网站开发例子做电影网站用什么主机好
  • 双人网页游戏网站精准推广的渠道有哪些
  • 网站推广教程网络推广搜索引擎
  • 一分钟建设网站出口网站制作
  • 网站 框架图网站开发和网站制作的区别
  • 网站开发答辩难点哪个购物网站最便宜
  • wordpress网站慢app制作软件平台
  • 八冶建设集团有限公司网站本地云主机搭建wordpress
  • 做的网站加载太慢怎么办四子王旗建设局网站
  • 财务公司名称大全简单大气seo教程自学网
  • 找人做网站 源码被盗用wordpress各个页面名称标签