138. 复制带随机指针的链表 golang

138. 复制带随机指针的链表

这个题结构体特殊,需要更改上一篇博客的node结构体

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

要求返回这个链表的 深拷贝。

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

val:一个表示 Node.val 的整数。
random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 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 <= 10000
Node.random 为空(null)或指向链表中的节点。
节点数目不超过 1000 。

解法

/*** Definition for a Node.* type Node struct {*     Val int*     Next *Node*     Random *Node* }*/
func copyRandomList(head *Node) *Node {//1->2(4)->3->4->nilif head == nil {return nil}//1->1->2->2->3->3->4->4res := copyNextPoint(head)//1->1->2(4)->2(4)->3->3->4->4res = copyRandomPoint(res)//1->2(4)->3->4->nilres = listCut(res)return res
}func copyNextPoint(head *Node) *Node {temp := new(Node)temp.Next = headp := headfor p != nil {tmp := new(Node)tmp.Val = p.Valtmp.Next = p.Nextp.Next = tmpp = p.Next.Next}return temp.Next
}func copyRandomPoint(head *Node) *Node {temp := new(Node)temp.Next = headp := headfor p != nil {if p.Random != nil {temp_random := p.Nexttemp_random.Random = p.Random.Next}p = p.Next.Next}return temp.Next
}func listCut(head *Node) *Node {temp := new(Node)res := tempfor old := head; old != nil;{res.Next = old.Nextold.Next = res.Next.Nextold, res = old.Next, res.Next}return temp.Next
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

160. 相交链表 golang

160. 相交链表 计算两个链表长度&#xff0c;让长的先走到两个链表一样长&#xff0c;然后找交点 编写一个程序&#xff0c;找到两个单链表相交的起始节点。 如下面的两个链表&#xff1a; 在节点 c1 开始相交。 示例 1&#xff1a; 输入&#xff1a;intersectVal 8, li…

86. 分隔链表 golang

86. 分隔链表 只把小的放在一边&#xff0c;大于的不用放到右边&#xff08;这个题的题目比较晦涩&#xff0c;很多人说看不懂题&#xff0c;我也没看懂&#xff0c;解法也没什么特殊&#xff0c;半天没读懂题&#xff0c;看了别人的解法&#xff09; 给定一个链表和一个特定值…

141. 环形链表 golang

141. 环形链表 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff0c;则在该链表中没有环。 示例 1&#xff1a; 输入&a…

142. 环形链表 II golang

142. 环形链表 II 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff…

206. 反转链表 golang

206. 反转链表 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL Code /*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/ func reverseList(head *Li…

钗头凤&烦

冰日睡&#xff0c;寒风随&#xff0c;心凄意伤镜花碎。断世伪&#xff0c;奈何为&#xff1f;一尊孤剑&#xff0c;几分凄碎。泪&#xff01;泪&#xff01;泪&#xff01;应天怨&#xff0c;残心毁&#xff0c;一盏清酒消人醉。世无情&#xff0c;冷落对&#xff0c;满怀愁伤…

92. 反转链表 II golang

92. 反转链表 II 注意最后对于链表反转的操作&#xff0c;应该熟记 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m 2, n 4 输出: 1->4->3->2->5->NULL Code …

淡月残残&#xff0c;独孤人无眠&#xff0c;望着窗外漆黑的天&#xff0c;不由想起了家的温暖&#xff0c;心中虽烦&#xff0c;仍忘不了家这片避风湾。家&#xff5e;是风筝牵挂的轴线。思念&#xff01;思念&#xff01;我驾着小船&#xff0c;独自到梦的边源。海水&#xf…

237. 删除链表中的节点 golang

删除链表的节点 https://leetcode-cn.com/problems/delete-node-in-a-linked-list 最优解 把下一个节点的值移动到当前删除节点&#xff0c;然后更改当前节点的Next node.Val node.Next.Valnode.Next node.Next.Nextother p.next p.next.next即可达到删除的目的 /*** Defi…

离殇

那如梦如烟的往昔&#xff0c;或浓或淡&#xff0c;或苦或甜&#xff0c;来不及回头&#xff0c;就远远低抛落了脑后。我说&#xff1b;如果还有如果&#xff0c;我们会不会永远。

100. 相同的树 golang

100. 相同的树 给定两个二叉树&#xff0c;编写一个函数来检验它们是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1: 输入: 1 1/ \ / \2 3 2 3[1,2,3], [1,2,3]输出: true 示例…

真的可以吗?

中学时代与谁共生活&#xff1f;旧日笑脸的姓名是否还记得&#xff0c;那些宣誓曾经烂心窝&#xff0c;如今再喊够勇敢吗&#xff1f;当时有那么多梦想没去经历过&#xff0c;如今有在实现吗&#xff1f;当初遗憾不够努力痛苦过&#xff0c;什么时候也开始学会适应地生活。冒险…

101. 对称二叉树 golang

101. 对称二叉树 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \ 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3Code func isSymmetric(root *TreeNode)…

如果年轻,就出发吧!

开始吧&#xff0c;每到月底流量就会用超&#xff0c;于是我希望每月到头有几百的剩余。后来吧&#xff0c;就算24小时不停的毁依旧用不完&#xff0c;可等待充电让人焦急&#xff0c;于是我渴望电宝。再后来啊&#xff0c;拿着几乎每时每刻都是满电的手机&#xff0c;以及怎么…

102. 二叉树的层序遍历 golang

102. 二叉树的层序遍历 给你一个二叉树&#xff0c;请你返回其按 层序遍历 得到的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例&#xff1a; 二叉树&#xff1a;[3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回其层次遍历结果&…

golang slice append函数如何头插

题目 二叉树的锯齿形层次遍历 给定一个二叉树&#xff0c;返回其节点值的锯齿形层次遍历。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 例如&#xff1a; 给定二叉树 [3,9,20,null,null…

C++的头文件和实现文件分别写什么

在C编程过程中&#xff0c;随着项目的越来越大&#xff0c;代码也会越来越多&#xff0c;并且难以管理和分析。于是&#xff0c;在C中就要分出了头(.h)文件和实现(.cpp)文件&#xff0c;并且也有了Package的概念。对于以C起步&#xff0c;C#作为“母语”的我刚开始跟着导师学习…

104. 二叉树的最大深度 golang

104. 二叉树的最大深度 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c; 3/ \9 20/ \15 7返回它的最…

111. 二叉树的最小深度 golang

111. 二叉树的最小深度 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回它的最小深度 2. Code /***…

c++运算符优先级总结

经常写程序的时候&#xff0c;遇到运算符优先级的问题&#xff0c;令我汗颜的是&#xff0c;查书的次数挺多的……狠狠心&#xff0c;总结下。不过还要结合大量的编程实践来深入脑海。1、首先永远忘不了的是&#xff0c;逗号运算符级别最低&#xff0c;毫无争议的还有&#xff…