自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 剑指offer——C++ 题目略解(一)

本博客主要是用于在实习以及秋招期间进行刷题,主要是帮助自己理解《剑指offer》,希望对自己的思维逻辑以及题目理解有更深的理解:二维数组的查找:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题解:1.暴力搜索法:当时看到这个题目,最先想到的是利用暴力循环进行查找,对二维数组中的每个数据进行对比,若是匹配成功,则判定为true;若是查询不到,则返回为fal

2020-05-10 15:28:11 248 1

原创 剑指offer-正则表达式匹配(c++ 迭代)

正则表达式匹配请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现人一次(包含0次)。在本题中,匹配是只字符串的所有字符匹配整个模式。例如,字符串“aaa”与模式“a.a”和“abaca”匹配,但是与“aa.a”和“ab*a”均不匹配。题解:此题的含义:第一个字符串,是不包含’.'和‘* ’字符的纯字符串,而第二个字符则是需要判定包含有’.'和‘* ’字符的字符串,在正则话能否与第一个字符串进行匹配。因此在代码中,只需要考虑第二个字符

2020-06-06 16:59:06 167

原创 剑指offer-剪绳子(C++ 动态规划)

剪绳子*给你一根长度为n的绳子,请把绳子剪成整数长的m段(m,n都是整数,n>1并且m>1),每段绳子的长度即为k[0],k[1],…,k[m]。请问k[0]k[1]…,k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它简称长度分别为2,3,3,的三段,此时得到的最大乘积是18。题解:动态规划能够分解成小问题,并且小问题之间还有重叠的更小的小问题,选哟考虑的就是分解后的每个小问题的最优解。对于剪绳子,在剪第一刀的时候,有n-1种可能的选择,也就时间出来的第一段绳子的可能长度

2020-06-06 15:43:20 310

原创 剑指offer-机器人的运动范围(C++回溯)

机器人的运动范围地上有一个m行和n列的放个。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k=18时,机器人能够进入放个(35,37),因为3+5+3+7=18。但是,它不能进入放个(35,38),因为3+5+3+8=19.请问该机器人能够达到多少个格子?题解:利用回溯法进行方格查找:代码如下:class Solution {public: void findnum(const int thre

2020-06-05 11:34:11 175

原创 剑指offer-矩阵中的路径(C++ 回溯)

矩阵中的路径请设计一个哈桑农户,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个各自,则该路径不能再进入该各自。例如[a b c e, s f c s, a d e e]矩阵中包含一条字符串“bcced”的路径,但是矩阵中不包含“abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个各自之后,路径不能再次进入该格子。题解:利用回溯法实现。class Sol

2020-06-05 10:52:57 140

原创 剑指offer-滑动窗口的最大值(C++ 暴力+队列)

滑动窗口的最大值给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6

2020-06-05 08:56:36 198

原创 剑指offer-数据流中的中位数(C++ 数组和堆)

数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法独去数据流,使用GetMedian方法获取当前读取数据的中位数。题解:数组进行排序,每来一个数字对数组进行排序,奇数个数时输出中间位置的数值;偶数个数输出中间位置两个数值的...

2020-06-04 18:10:44 165

原创 剑指offer-二叉搜索树的第k个结点(C++)

二叉搜索树的第k个结点给定一棵二叉树,请找出其中的第k小的结点,例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4.题解:可以通过迭代进行二叉树中序遍历,此时二叉搜索树的顺序便是排好序的数组。实现代码如下:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left

2020-06-04 10:07:58 238

原创 剑指offer-按之字形顺序打印二叉树+把二叉树打印成多行(C++ list)

按之字形顺序打印二叉树请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。题解:利用List存储所有的结点,按层次顺序一层层存储结点。然后利用偶数层正序,奇数层反序,进行结点值存储。实现代码如下:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x

2020-06-02 21:00:38 116

原创 剑指offer-对称的二叉树(c++)

对称的二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。题解:对称二叉树:二叉树与其镜像是相同的。则表示,对称二叉树即以跟结点为对称轴,左右子树对称。左子树的左节点等于右子树的...

2020-06-02 11:48:01 111

原创 剑指offer-二叉树的下一个结点(C++ 辅助遍历)

二叉树的下一个结点给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子节点,同时包含指向父节点的指针。题解:找出二叉树所有的结点的中序遍历进行保存,遍历数组找到该节点,输出该位置的下一数据。代码如下:/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *

2020-06-02 11:22:34 86

原创 剑指offer-删除链表中重复的结点(C++直接删除法)

删除链表中重复的结点在一个排序的链表中,存在重复的节点,请删除该链表中重复的结点,重复的结点不保留,返回链表的头指针。例如,链表1->2->3->3->4->4->5处理后为1->2->5。题解:直接删除法:用当前结点指针与下一结点指针遍历整个链表,当当前节点与下一结点相等时,则下一结点+1,直到不相同为止。此时,更新当前结点为下一结点,下一结点变为下一结点的下一结点。不断更新迭代。直到遍历整个链表。代码如下:/*struct ListNode {

2020-06-02 10:16:19 325

原创 剑指offer-链表中环的入口结点(C++ map 环节点)

链表中环的入口结点给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题解:1)利用辅助空间map,来一个陌生结点,则存入map,当链表有尾节点时,则不含有环。若含有环,则第一个遇见的存在map中的结点,则是环的入环结点。代码如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/

2020-06-01 21:24:35 169

原创 剑指offer-字符流中第一个不重复的字符(c++ hash)

字符流中第一个不重复的字符请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是“g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符时“l”。如果当前字符流没有存在出现一次的字符,返回#字符。题解:利用hash表对字符进行存储,然后根据存储的顺序,找到...

2020-06-01 20:20:42 117

原创 剑指offer-表示数值的字符串(C++ 暴力法)

表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”,“5e2”,“-123”,“3.1415”,和“-1E-16”都表示数值。但是“12e”,“1a3.14”,“1.2.3”,“±5”和“12e+4.3”都不是。题解:暴力法,将所哟...

2020-06-01 17:54:02 122

原创 剑指offer-构建乘积数组(C++ 辅助空间)

构建乘积数组给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B的元素B[i]=A[0] A[1] …* A[i-1]* A[i+1]* …* A[n-1]。不能使用除法。(注意:规定B[0]=A[1]* A[2]* …* A[n-1], B[N-1]=A[0]* A[1]* … A[n-2])*题解:将B[i]=A[0]* A[1]* …* A[i-1]* A[i+1]* …* A[n-1]分解为:A[0]* A[1]* …* A[i-1]与A[i+1] …

2020-06-01 14:57:38 141

原创 剑指offer-数组中重复的字(C++ 辅助空间 自身空间)

数组中重复的字在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字,例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。题解:1)辅助空间申请一个map,每次遍历一个数,如果map中没有则添加,若有,则输出。代码如下:class Solution {public: // Parameters: // numbe

2020-06-01 11:09:48 126

原创 剑指offer-不用加减乘除做加法+求1+2+...+n

求1+2+…+n求1+2+3+4+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题解:利用或与的特点进行研究。逻辑与不成立,则忽略&&符号后的操作。代码如下:class Solution {public: int Sum_Solution(int n) { int res=n; n && (res = res + Sum_Solution(n -

2020-05-31 10:23:56 178

原创 剑指offer-孩子们的游戏(圆圈中最后剩下的数)(C++ 两种方式)

孩子们的游戏(圆圈中最后剩下的数)每年刘毅儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。其中有个游戏是这样的:首先,让小朋友围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊道m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意挑选礼物,并且不再回到圈中,从他的下一个小朋友开始继续0,…,m-1报数。这样下去,知道只剩下一个小朋友,不用表演,并且能拿到牛客名贵的典藏版礼物。请你试想下,那个小朋友会得到这个礼品呢?(注:小朋友的编号是0到n-1)如果没有小朋友

2020-05-29 22:08:34 181

原创 剑指offer-扑克牌顺子(C++ 两种方式)

扑克牌顺子LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,两个小王(一副牌原本是54张)。他随机从中抽出了5张牌,相测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票。他将大/小王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。要求使用这副牌模拟上面的过程,然后告诉我们LL的运气如何,如果抽出的5张牌能组成顺子就输出true,否则就输出false。为了方便起见,可以认为大小王为0题解:1)先进行排序,找出大小王个数。判定前后数字是否相等,相等则fa

2020-05-29 20:50:40 604

原创 剑指offer-反转单词顺序(C++)

反转单词顺序牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?题解:对于此题,考虑主要的函数时string的reverse函数,其能将string中的字符串的顺序颠倒。因此,首先先将str字

2020-05-29 12:05:36 196

原创 剑指offer-左旋转字符串(C++ 辅助队列+字串)

左旋转字符串汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=“abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!题解:1)辅助队列。利用辅助队列 ,在遍历时将字符串的前n个字符存入队列,然后将后面的字符串前移n位,然后将队列中的字符补在字符串houn位。代码如下:class Solution {public

2020-05-28 21:49:51 159

原创 剑指offer-和为S的两个数字(C++ 暴力+双指针)

和为S的两个数字输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。题解:1)暴力枚举法:利用双重遍历。第一个遍历获得位置i的数,然后第二个遍历=i+1。比较两个数和与sum的大小。若小于sum,第二遍历++;若==sum,则保存,与已保存的数据进行乘积大小比较,保存较小的那个;若大于,则,break。第一个遍历位置++。代码如下:class Solution {p

2020-05-28 21:09:17 124

原创 剑指offer-和为S的连续正数序列(C++ 多种方法)

和为S的连续正数序列小明很喜欢数学,有一天他在做数学作业时,要求计算出9-16的和,他马上就写出来正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?Good Luck!输出描述:输出所有和为s的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。题解:应对此题,想到的方法主要是以下三种

2020-05-28 15:51:29 158

原创 剑指offer-数组中只出现一次的数字(C++ 多种方法)

数组中只出现一次的数字一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。题解:这个题说难不难,说简单也不简单。现在主要针对此题,列出下列三种方法:1)排序法:将数组进行排列,此时由于只有两个数只出现了一次,其他都是两次,因此只需要比较前后两个数字是否相同,如果不相同,则是目标数字。当出现了两个不重复数字,则跳出。代码如下:class Solution {public: void FindNumsAppearOnce(vector<int

2020-05-27 21:44:24 438

原创 剑指offer-平衡二叉树(c++ 多种方法)

平衡二叉树输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。题解:1)最长最短法:根据二叉树的深度来进行判断。找出二叉树的最长路径和最短路径,判断其差值是否小于等于1。代码如下:class Solution {public: int mi(TreeNode* pRoot){ if(!pRoot) return 0; int left=ma(pRoot->left); int

2020-05-27 20:17:46 91

原创 剑指offer-二叉树的深度(C++ 递归+层次遍历)

二叉树的深度输入一棵二叉树,求该树的深度。从根节点到叶节点依次经过的结点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。题解:针对此题,有多种解法,下面介绍其中两种。1)递归法:通过递归,来不断计算最长路径,代码如下:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {

2020-05-27 15:40:42 424

原创 剑指offer-数字在排序数组中出现的次数(c++ 多种方法)

数字在排序数组中出现的次数统计一个数字在排序数组中出现的次数。题解:1)暴力穷举法:一一比较,输出次数2)二分法——相同数字遍历法:通过二分法,找到目标数字在排序数组中的一个位置。通过该位置用两个指针对其进行前后遍历,当指针指向的数字不为目标数字时停止。代码如下:class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.size()==0) return 0;

2020-05-27 10:22:25 418

原创 剑指offer-两个链表的第一个公共节点(c++ 三种方法)

两个链表的第一个公共节点输入两个链表,找出他们的第一个公共节点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式实现的,保证传入数据是正确的)题解:阵对这个题目有三种解法:1)map法:将第一个链表的所有节点都保存进入map中,然后然后对第二个链表进行查找,观察是否存在在map中,若存在,则输入该节点。代码如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), n

2020-05-26 17:29:01 346

原创 剑指offer-数组中的逆序对(C++ 归并)

数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P,并将P对1000000007取模的结果输出。即输出P%1000000007。题目保证输入的数组没有相同的数字。数据范围:对于%50的数据,size<10^4对于%75的数据,size<10^5对于%100的数据,size<2*10^5题解:对于这个题,纯粹利用暴力穷举肯定会发生超时的结果。因此,只能利用算法对数据进行处理。选择归并法

2020-05-26 16:19:38 179

原创 剑指offer-第一个只出现一次的字符(C++ map+hash)

第一个只出现一次的字符在一个字符串(0<字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置,如果没有,则返回-1。(从0开始奇数)题解:针对此题,基于map有两种方法。1)unordered_map法。第一次遍历,将字符串压入unordered_map,如果不存在,则插入,如果存在,则对其value进行+1。第二次遍历所有字符,输出第一个unordered_map<char,int>,int位==1的索引。class Solution

2020-05-25 20:41:35 156

原创 剑指offer-丑数(c++ 指数法)

丑数把只包含质因子2,3,5的数称为丑数(ugly number)。例如6,8都是丑数,但14不是,这是因为14包含质因子7。习惯上我们把1当作第一个丑数,求按从小到大的顺序的第N个丑数。题解:根据题目,最直接的方式就是暴力穷举法,但是对于暴力穷举法来说,时间复杂度太大,因此抛弃。其代码如下注释部分。指针法,后来参考题解,了解到三指针法。对于这种方法,主要是根据已有数据进行数字递增。对于数组,先存入1。此时,t2,t3,t5都为0;此时比较,res[t2]*2,res[t3]*3,res[t

2020-05-25 10:52:13 153

原创 剑指offer-把数组排成最小的数(C++)

把数组排成最小的数输入一个正整数数组,把数组里面所有的数字拼接起来排成一个数,打印出所有能拼接出的数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字321323。题解:对于此题,最直观的方法是对所有的数字进行全排列,然后找出最小的那个数字。另一个就是对每个数字进行大小排列。1)大小排列法:景理两次遍历,每次排列i位置,将该位置与后面所有的数字进行拼接,找出所有的不同的拼接,然后就可以寻找出排列以i位置,与后面数字拼接的最小的那个数字,将该数字交换到i位置上。然后

2020-05-24 16:07:56 999

原创 剑指offer-整数中1出现的次数(从1到n整数中1出现的次数)(C++)

整数中1出现的次数(从1到n整数中1出现的次数)求出1到13的整数中1出现的次数,并算出100到1300的整数中1出现的次数。为此他特地数了1到13之间包含1的数字有1,10,11,12,13,因此共出现6次但对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快求出任一非负整数区间中1出现的次数(从1到n整数中1出现的次数)。题解:对于1到n中出现的1的次数,需要判定的是,1到n中每个数中1出现的次数,对此有两种方法。1)余数法:对于1到n中的任意一个数,对其进行取余数法

2020-05-24 10:11:51 130

原创 剑指offer-连续子数组的最大和(c++ 暴力+动态规划)

连续子数组的最大和HZ偶尔会拿些专业问题来忽悠那些非计算机专业的学生。今天测试组开完会后,他又发话了:在古老的以为模式识别中,常常需要计算最长子向量的最大和,当向量全为正数时,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数取弥补他呢?例如,{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,第3个结束).给定一个数组,返回他的最大连续子序列的和,你会不会被他忽悠住(连续子向量的长度至少为1)。题解:对于此题,有两种方法。为暴力穷举和动态规划

2020-05-23 10:15:13 456

原创 剑指offer-最小的K个数(C++ 函数+堆排序)

最小的K个数输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,8,3这8个数字,则最小的4个数字为1,2,3,4。题解:这里主要提供两种方法,或者说是一种方法,但是实现方法不同。1)函数法:利用c++库中的排序函数对输入进行排序,输出前K个数。代码如下:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {

2020-05-22 21:10:34 266

原创 剑指offer-数组中出现次数超过一半的数字(c++ 多种方法)

数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9 的数组{1,2,3,2,2,4,5,2}.由于数字2出现了5次,超过了数组长度的一半,因此输出2.若不存在,则输出0。题解:根据题目要求,可以通过多种方法进行测试。1)排序—搜索法首先对数组进行排序,相同数字位于连续的位置。因此,计算每个数字出现的次数,如果超过一半,则退出遍历,输出结果。若未超过一般,则计数重置为0,数字修改为下一数字。代码如下:class Solution {p

2020-05-22 11:33:38 908

原创 剑指offer-字符串的排列(C++ 递归+函数)

字符串的排列题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排序。例如输入abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。题解:对于这个题目,有多种解法。有函数法、深度优先法、以及函数详解法。1)函数法:对于我们需要字符串的全排列,可以根据函数next_permutation得到。其代码如下:next_permutation函数的主要功能,就

2020-05-22 10:46:27 164

原创 剑指offer-二叉搜索树与双向链表(C++递归)

二叉搜索树与双向链表输入一棵二叉树,将二叉树转换成一个排序的双向链表。要求不能创建新的点,职能调整树中节点指针的方向。题解:既然是二叉树,则可以看作时递归问题。我们可以根据题目要求进行递归调整,根据树中节点指针的改向,得到如下代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {

2020-05-21 15:31:08 116

原创 剑指offer-复杂链表的复制(C++)

复杂链表的复制输入一个复杂链表(每个节点有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向随机节点),请对此链表进行深拷贝,并返回拷贝后的头节点。(注意:输出的结果中请不要返回参数中的节点引用,否则判题程序会直接返回为空)题解:对于此题,较为简单,主要需要理解的是,对链表的深拷贝。对于链表的深拷贝,就是需要重新建立一个链表,除了链表中的label相同,地址空间等都需要重新申请,不能与原节点有重合。因此,在实现代码时,新链表的每一个节点都需要重新申请空间,并利用指针正确指向节

2020-05-21 10:56:30 118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除