首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

复制随机指针链表( LeetCode 138 )

吴师兄思路 对于链表中每个节点来说,它都有三个特征: 值为 val 一个指向下一个节点指针 next 一个指向随机节点指针 random 要想复制这样一个复杂链表必须要考虑到这三个特征。...需要通过第二次遍历过程进行指针指向调整。 在第二次遍历过程中,以原链表中节点作为键,查找当前原节点指针指向,然后调整新节点指针指向。...// 复制随机指针链表( LeetCode 138 ):https://leetcode-cn.com/problems/copy-list-with-random-pointer class Solution...// 复制随机指针链表( LeetCode 138 ):https://leetcode-cn.com/problems/copy-list-with-random-pointer class Solution...# 复制随机指针链表( LeetCode 138 ): https://leetcode-cn.com/problems/copy-list-with-random-pointer class Solution

59830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    复制随机指针链表

    给定一个链表,每个节点包含一个额外增加随机指针,该指针可以指向链表中任何节点或空节点。 要求返回这个链表深度拷贝。...解:万能hashmap,第一步先在hashmap中存一份副本,副本只有对应节点值;第二步将对应next和random指针拷贝过去。...浅复制(浅克隆) 被复制对象所有变量都含有与原来对象相同值,而所有的对其他对象引用仍然指向原来对象。换言之,浅复制仅仅复制所考虑对象,而不复制它所引用对象。...深复制(深克隆) 被复制对象所有变量都含有与原来对象相同值,除去那些引用其他对象变量。那些引用其他对象变量将指向被复制过新对象,而不再是原有的那些被引用对象。...换言之,深复制把要复制对象所引用对象都复制了一遍。 /** * Definition for singly-linked list with a random pointer.

    33010

    LeetCode 复制随机指针链表(C语言)

    题目要求 给你一个长度为 n 链表,每个节点包含一个额外增加随机指针 random ,该指针可以指向链表中任何节点或空节点。 构造这个链表深拷贝。...新节点 next 指针和 random 指针也都应指向复制链表中新节点,并使原链表和复制链表中这些指针能够表示相同链表状态。复制链表中指针都不应指向原链表中节点 。...指针域,还是比较简单,新建一个链表然后拷贝内容,然后进行尾插就可以了。...但是新链表如果加上了random指针域就有些困难了,我们要从原来链表中找到当前节点random指针指向了第几个节点或者是空指针,然后才能知道新链表当前结点应该指向哪里。...我们只需要一个指针来遍历原链表,然后用两个指针来再原链表每个结点后面创建新结点。 cur用于遍历原结点,p1遍历新节点。

    75800

    golang刷leetcode 随机指针链表复制

    在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中任意节点或者 null。...(空指针),因此返回 null。...提示: -10000 <= Node.val <= 10000 Node.random 为空(null)或指向链表中节点。 节点数目不超过 1000 。...解题思路: 1,本题难点在于有个随机指针 2,随机指针有3种情况: (1)可以指向自己 (2)指向前方节点 (3)指向后方节点 3,直接复制,没有规律可找, 4,所以先不考虑随机指针,原地复制链表...,即在每个节点后下一个节点之间插一个当前节点copy 5,复制随机指针,每个copy节点随机指针,都是当前节点随机指针指向元素下一个元素。

    24510

    Leetcode No.138 复制随机指针链表(回溯)

    一、题目描述 给你一个长度为 n 链表,每个节点包含一个额外增加随机指针 random ,该指针可以指向链表中任何节点或空节点。 构造这个链表 深拷贝。...新节点 next 指针和 random 指针也都应指向复制链表中新节点,并使原链表和复制链表中这些指针能够表示相同链表状态。复制链表中指针都不应指向原链表中节点 。...而本题中因为随机指针存在,当我们拷贝节点时,「当前节点随机指针指向节点」可能还没创建,因此我们需要变换思路。一个可行方案是,我们利用回溯方式,让每个节点拷贝操作相互独立。...对于当前节点,我们首先要进行拷贝,然后我们进行「当前节点后继节点」和「当前节点随机指针指向节点」拷贝,拷贝完成后将创建新节点指针返回,即可完成当前节点指针赋值。...具体地,我们用哈希表记录每一个节点对应新节点创建情况。遍历该链表过程中,我们检查「当前节点后继节点」和「当前节点随机指针指向节点」创建情况。

    30410

    复制随机指针链表

    一、题目 给你一个长度为 n 链表,每个节点包含一个额外增加随机指针 random ,该指针可以指向链表中任何节点或空节点。 构造这个链表 深拷贝。 ...新节点 next 指针和 random 指针也都应指向复制链表中新节点,并使原链表和复制链表中这些指针能够表示相同链表状态。复制链表中指针都不应指向原链表中节点。...【random_index】随机指针指向节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。 你代码 只 接受原链表头节点 head 作为传入参数。...三、解题思路 3.1> 思路1:利用哈希表 根据题目描述,如果仅仅是单向链表,我们可以非常方便通过在遍历旧链表同时来构建新链表,但是本题中一个难点是,存在一个属性是Node random,它用来表示随机一个指针....next = node;             node.next = temp;             p1 = temp;         }         // 步骤2:关联random指针

    27000

    复制随机指针链表(链表)

    大家好,又见面了,我是你们朋友全栈君。 给你一个长度为 n 链表,每个节点包含一个额外增加随机指针 random ,该指针可以指向链表中任何节点或空节点。...新节点 next 指针和 random 指针也都应指向复制链表中新节点,并使原链表和复制链表中这些指针能够表示相同链表状态。复制链表中指针都不应指向原链表中节点 。...random_index:随机指针指向节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。 你代码 只 接受原链表头节点 head 作为传入参数。...(空指针),因此返回 null。...= m[head]; } return root; } }; 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168557.html

    31940

    【Leetcode】链表深度拷贝——复制随机指针链表

    : 给你一个长度为 n 链表,每个节点包含一个额外增加随机指针 random ,该指针可以指向链表中任何节点或空节点。...新节点 next 指针和 random 指针也都应指向复制链表中新节点,并使原链表和复制链表中这些指针能够表示相同链表状态。复制链表中指针都不应指向原链表中节点 。...random_index:随机指针指向节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。 你代码 只 接受原链表头节点 head 作为传入参数。...,复制链表同时也要保证该节点random指针指向值与原有链表random指向值不变。...(空指针情况另行处理) 3、到了第三步,我们复制后链表节点random已经处理完毕了,接下来我们将两个链表分割开来即可。

    37720

    ​LeetCode刷题实战138:复制随机指针链表

    今天和大家聊问题叫做 复制随机指针链表,我们先来看题面: https://leetcode-cn.com/problems/copy-list-with-random-pointer/ A linked...题意 给定一个链表,每个节点包含一个额外增加随机指针,该指针可以指向链表中任何节点或空节点。 要求返回这个链表 深拷贝。 我们用一个由 n 个节点组成链表来表示输入/输出中链表。...random_index:随机指针指向节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。 样例 ? 解题 这题可以利用 HashMap 来实现。...遍历第二遍链表,将之前生成节点取出来,更新它们 next 和 random 指针。...好了,今天文章就到这里。

    31540

    golang刷leetcode 链表(4)复制随机指针链表

    给定一个链表,每个节点包含一个额外增加随机指针,该指针可以指向链表中任何节点或空节点。 要求返回这个链表深拷贝。...1,它下一个指针和随机指针都指向节点 2 。...节点 2 值是 2,它下一个指针指向 null,随机指针指向它自己。 提示: 你必须返回给定头拷贝作为对克隆列表引用。...解题技巧: 1,因为random指针存在,所以copy时候如何定位random是个问题,所以简单方法在原链表每个位置后面插入一个元素。...2,由于random可能指向前面的指针,所以复制完之前不能拆解 3,注意边界条件,对于指针类题目,一定要判断空情况 /* // Definition for a Node. class Node { public

    29730

    LeetCode 138:复制随机指针链表 Copy List with Random Pointer

    给定一个链表,每个节点包含一个额外增加随机指针,该指针可以指向链表中任何节点或空节点。 要求返回这个链表深拷贝。...1,它下一个指针和随机指针都指向节点 2 。...节点 2 值是 2,它下一个指针指向 null,随机指针指向它自己。 提示: 你必须返回给定头拷贝作为对克隆列表引用。...解题思路: 由于需要考虑随机指针,随机指针指向节点可能是null,也可能是链表最后一个节点,深拷贝下,你不能将新链表随机指针指向原链表节点,所以无法一遍得到新链表。...是一种很巧妙思路: 原链表:1->2->3 复制每个节点到原节点后面:1->1->2->2->3->3 复制随机指针指向关系 拆分链表:1->2->3, 1->2->3 复制随机指针指向时,原节点随机节点下一个节点即为新节点随机节点

    80540
    领券