剑指offer
文章平均质量分 70
秦怀
这个作者很懒,什么都没留下…
展开
-
剑指Offer刷题全集 --V1 版本
文章目录前言1.二维数组中的查找题目描述思路 & 解答暴力破解比较查找法2.替换空格题目描述思路 & 解答调用API函数自实现c++实现3.从尾到头打印链表题目描述思路 & 解答借助栈实现递归调用头插法4.重建二叉树题目描述思路 & 解答5.旋转数组的最小数字题目描述思路 & 解答直接遍历二分法6.斐波那契数列题目描述思路 & 解答直接暴力重复利用结果(动态规划)7.跳台阶题目描述思路 & 解答暴力递归动态规划8.两个栈实现一个队列题目描述思路 &am原创 2021-12-12 00:31:27 · 1271 阅读 · 0 评论 -
150页的剑指Offer解答PDF,它来了!!!
它来了!!!终于整理出了第一版剑指Offer的PDF,主要以Java语言为主,一共67道题,100多页。领取方式如下(无套路直接获取百度网盘的 ???? 链接,如果链接失效可以直接找我):【秦怀杂货店】公众号内发送:剑指Offer刷题仓库:CodeSolution ,具体的分类如下:数组剑指Offer(二)–二维数组中的查找剑指Offer(十三)–调整数组顺序使奇数位于偶数前面剑指Offer(十九)-- 顺时针打印矩阵剑指Offer(二十八)-- 数组中次数出现超过一半的数字剑指原创 2021-04-24 19:34:33 · 6146 阅读 · 1 评论 -
剑指Offer(52)-- 正则表达式匹配(递归实现和动态规划)
题目描述请实现一个函数用来匹配包括’.‘和’*‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配示例1输入“aaa”,“a*a”返回值true思路以及解答这道题,仔细一想,感觉情况很多,很凌乱,此处介绍的是递归的做法,其实本题还可以使用动态规划。最重要的是需要分类讨论,原串定义为原创 2021-03-29 15:04:09 · 301 阅读 · 0 评论 -
剑指Offer(51)-- 构建乘积数组
题目描述给定一个数组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];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。输入[1,2,3,4,5]输出[120,60,40,30,24]思路以及解答由于这道题不可原创 2021-03-27 15:02:50 · 330 阅读 · 0 评论 -
剑指Offer(50)-- 数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是第一个重复的数字2。没有重复的数字返回-1。示例1输入[2,3,1,0,2,5,3]返回值2思路以及解答我们首先可能想到的做法,就是借助set,如果元素不存在set中,就将元素添加进去,如果set中包含该元素,就返回该元素即可。如果一直原创 2021-03-27 15:01:29 · 252 阅读 · 0 评论 -
剑指Offer(49)-- 把字符串装换为整数
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空返回值描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入“+2147483647”返回值2147483647示例2输入“1a33”返回值0思路以及解答这道题的思路相对比较直观,首先需要判定输入的字符串是否不为空且有效,否则返回0。如果是有效字符串,初始化结果result为0,big原创 2021-03-25 14:12:43 · 233 阅读 · 0 评论 -
剑指Offer(48)-- 不使用加减乘除实现加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。示例1输入1,2返回值3思路以及解答这道题不让使用加减乘除,那么我们只能考虑其他的方向,比如位运算,位运算可以巧妙的实现加和的操作。首先让我们来了解一下位运算,操作数1操作数2&运算结果|运算结果^运算00000010111001111110而如果两个数相加,肯定是两个数的二进制相加,再来说说补码的概念,原创 2021-03-25 13:55:21 · 219 阅读 · 0 评论 -
剑指Offer(47)-- 1+2+...+n的求和(不使用循环或者乘法)
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例1输入5返回值15思路以及解答这个问题,如果直接使用for循环,超级简单,重拳出击,时间复杂度为O(n)。代码如下:public class Solution { public int Sum_Solution(int n) { int sum=0; for(int i=1;i<=n;i+原创 2021-03-22 16:53:04 · 333 阅读 · 0 评论 -
剑指Offer(46)-- 最后出圈的士兵(约瑟夫)
题目描述约瑟夫问题,是经典的问题,假设有n个士兵围着成为一圈,他们的号码是从0到n-1,那么从第一个开始报数,第一个报数0,每次加1,报到n-1的时候,报n-1的士兵出圈,下一个士兵接着从0开始报数,这样循环,值得最后,剩下一个士兵,那这个士兵就是胜利者。现在给出士兵数量m,和报数n,求解最后胜利的是几号士兵?示例输入5,3输出2思路以及解答这道题,由于是围成一个圆圈,涉及到不断删除士兵(出圈)的问题,所以用链表比较适合。判断如果n,或者m小于等于0,非法情况直接返回-1。先把0原创 2021-03-19 09:13:47 · 264 阅读 · 0 评论 -
剑指Offer(45)-- 扑克牌顺子
HaloDashboard仪表盘文章所有文章写文章分类目录标签页面附件评论外观用户系统首页/文章/写文章剑指Offer(45)-- 扑克牌顺子题目描述扑克牌可以组成顺子,大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。5张牌【A,0,3,0,5】就可以变成“1,2,3,4,5”(大小王分别看作2和4),这样就组成了顺子。(可以认为大小王是0。)输入五张牌,如果牌能组成顺子就输出true,否则就输出false。示例1输入[0,3,2,6,4]原创 2021-03-18 13:42:56 · 613 阅读 · 2 评论 -
剑指Offer(44)-- 翻转单词序列(不调用API)
题目描述给定一个句子,将句子中的单词进行翻转,注意,单词内部的字符顺序不改变,改变的是单词与单词之间的顺序,比如“I am a coder.”,翻转之后变成“coder. a am I”。示例注意:引号内部才是输入的内容输入“You are a cool boy.”输出“boy. cool a are You”前面已经讲过使用JDK的api切割字符串,以及使用堆栈实现倒序的方法,这里介绍的,是一个原生的方法。首先判断字符串str是否为空或者为空字符,如果str不为空,则初始化sta原创 2021-03-18 13:41:24 · 260 阅读 · 0 评论 -
剑指Offer(44)-- 翻转单词序列
题目描述公司最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?输入“student. a am I”返回值“I am a student.”思路以及解答第一种方法,Java里面有切原创 2021-03-16 11:24:10 · 257 阅读 · 0 评论 -
剑指Offer(43)--左旋转字符串
【刷题笔记】Github仓库地址:https://github.com/Damaer/codeSolution编程笔记地址:https://damaer.github.io/codeSolution/题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!.原创 2021-03-05 01:24:51 · 559 阅读 · 1 评论 -
剑指Offer(42)-- 和为S的两个数字
【刷题笔记】Github仓库地址:https://github.com/Damaer/codeSolution编程笔记地址:https://damaer.github.io/codeSolution/题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。返回值描述:对应每个测试案例,输出两个数,小的先输出。输入[1,2,4,7,11,15],15返回值[4,11]暴力遍历直接遍历每两个数,查.原创 2021-03-05 01:23:32 · 587 阅读 · 1 评论 -
剑指Offer(41)-- 和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序示例1输入9返回值[[2,3,4],[原创 2021-03-05 01:22:32 · 262 阅读 · 1 评论 -
剑指Offer(40)-- 数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。实例输入[92,3,43,54,92,43,2,2,54,1]输出3,1思路以及解答HashMap存储出现次数使用hashmap存储数字出现的次数,key为出现的数字,value为该数字出现的次数。遍历里面所有的数字,如果hashmap中存在,那么value(次数)+1,如果hashmap中不存在,那么value置为1。遍历完成之后,需要将次数为1的数字捞出来,同样是遍历hashm原创 2021-03-02 23:57:00 · 279 阅读 · 0 评论 -
剑指Offer【39】-- 平衡二叉树
【刷题笔记】Github仓库地址:https://github.com/Damaer/codeSolution笔记地址:https://damaer.github.io/codeSolution/题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。示例1输入{1,.原创 2021-02-27 13:41:33 · 277 阅读 · 0 评论 -
剑指Offer【38】-- 树的深度
【刷题笔记】Github仓库地址:https://github.com/Damaer/codeSolution笔记地址:https://damaer.github.io/codeSolution/题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例1输入{1,2,3,4,5,#,6,#,#,7}返回值4思路以及解答声明:这里的输入是一个数的根节点,也就是从根节点,我们就可以获取到树的所有节点,而.原创 2021-02-27 13:36:21 · 276 阅读 · 0 评论 -
剑指Offer(37)-- 数字在升序数组中出现的次数
【刷题笔记】Github仓库地址:https://github.com/Damaer/codeSolution笔记地址:https://damaer.github.io/codeSolution/题目描述统计一个数字在升序数组中出现的次数。示例1输入[1,2,3,3,3,3,4,5],3返回值4思路以及解答由于数组是有序的,可以明显看到是分治法。第1步是找出数值为k的数的索引:假设数组为nums[],一开始的左边索引为left = 0,右边界索引为right = num.原创 2021-02-27 13:34:17 · 272 阅读 · 0 评论 -
剑指Offer【36】-- 两个链表的第一个公共节点
【刷题笔记】Github仓库地址:https://github.com/Damaer/codeSolution笔记地址:https://damaer.github.io/codeSolution/题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路以及解答HashSet是否包含第一种做法,直接依赖于HashSet,遍历第一个链表的时候,将所有的节点,添加到hashset中,遍历第二个链表的时候直接判断.原创 2021-02-27 13:32:36 · 272 阅读 · 0 评论 -
剑指Offer【35】--数组中的逆序对
代码已经同步到刷题仓库【CodeSolution】仓库地址:https://github.com/Damaer/CodeSolution文档地址:https://damaer.github.io/CodeSolution/题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007示例 1:输入: [.原创 2021-02-24 01:00:23 · 303 阅读 · 0 评论 -
剑指Offer【33】--丑数
文章目录题目描述输入返回值暴力破解换种思路题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。如果n = 9, 返回 10。注意事项:我们可以认为1也是一个丑数。输入7返回值8暴力破解首先,我们想到的是暴力破解,从1开始遍历,每一个数,都不断地除以2,3,5,看最后的结果是不是等于1,如果等于1则说明这个数是丑数,否则不是丑数。代码如下(这样的原创 2021-02-24 00:56:02 · 283 阅读 · 0 评论 -
剑指Offer【34】-- 第一次出现的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例1输入“google”返回值4思路以及解答1.第一种做法:使用LinkedhashMap,key是字符,value是索引,如果里面存在该字符,则将其索引置为一个极大值(999999999),如果不存在该字符,则将该字符以及索引存放到map中。最终查找出第一个value值不为(999999999)的原创 2021-02-24 00:51:46 · 312 阅读 · 0 评论 -
剑指Offer【32】-- 将数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。示例1输入[3,32,321]返回值“321323”解答这道题要求拼起来的数是最小的数字,其实是一个排序问题,只要理解了这一点,就可以快速解决。假设有两个字符串s1=3,s2=32,那s1+s2=332,s2+s1=323,也就是s1+s2>s2+s1。像上面这种情况,要想拼接起来的数最小,肯原创 2020-12-26 16:56:54 · 239 阅读 · 0 评论 -
剑指Offer(30)--最小的k个数
题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例1输入[1,-2,3,10,-4,7,2,-5]返回值18输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。第一种方法:暴力破解,使用两层循环,求每一个区间的和: public int simpleSolution(int[] array) {原创 2020-12-26 16:53:45 · 221 阅读 · 0 评论 -
剑指Offer(29)--最小的k个数
文章目录题目描述思路与解析题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路与解析下面方法的思路比较简单,但是比较取巧,直接借助了最大顶堆,也就是上面的元素是最大的。如果里面个数超过k的话,则弹出堆顶的元素。import java.util.ArrayList;import java.util.PriorityQueue;public class Solution { public ArrayList原创 2020-07-27 23:30:16 · 268 阅读 · 0 评论 -
剑指Offer(28)--数组中出现次数超过一半的数字
文章目录题目描述思路与解析题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路与解析这里主要使用了多数投票法,先取第一个数字,出现次数是1,遍历后面的数字,如果相同则加1,如果不同则减1,结果如果为0,则把当前的数字更新,而且次数更新为1。直到最后,则可以获取到出现次数最多的数字,再次遍历数组,统计该数字出现的次数,如果次数大于长原创 2020-07-26 23:28:34 · 349 阅读 · 0 评论 -
剑指Offer(27)--字符串的排序
文章目录题目描述输入描述:思路以及解析题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路以及解析使用回溯,通过交换字符实现。import java.util.ArrayList;import java.util.Comparator;public class Solu原创 2020-07-26 23:24:14 · 307 阅读 · 0 评论 -
剑指Offer(26)--二叉搜索树和双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路以及解答主要是使用递归,设置一个head和end,head只在第一次设置值,后面就是将end的right指向当前node,将当前node的left指向end,把end指向当前的node。class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; publ原创 2020-07-26 23:22:42 · 260 阅读 · 0 评论 -
剑指Offer(25)--复杂链表的复制
文章目录题目描述思路以及解法题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路以及解法一共有三种写法,第一种就是下面的,先复制next链路上的节点。然后复制random节点。复制random节点的时候,采取的是遍历的做法。class RandomListNode { int label;原创 2020-07-26 23:20:05 · 262 阅读 · 0 评论 -
剑指Offer(24)--二叉树中和为某一值的路径
文章目录题目描述思路以及解答题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路以及解答主要是借助队列,将遍历的节点放进队列中,到叶子节点之后计算和,然后再回溯到上面一层的时候,将队列最后一个元素取出来,放进当前的元素。import java.util.ArrayList;import java.util.ArrayList;import java.util.LinkedLis原创 2020-07-26 23:03:20 · 263 阅读 · 0 评论 -
剑指Offer(23)--二叉搜索树的后序遍历序列
文章目录题目描述思路以及解答题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路以及解答注意是二叉搜索树,如果是后续遍历的话,那么应该最后一个元素是中间元素mid,前面的元素可以分为两部分,一部分比mid小,另一部分全部比mid大。如果破坏这个原则,那么就应该输出No。 public boolean VerifySquenceOfBST(int[] sequence) { if原创 2020-07-26 23:00:06 · 246 阅读 · 0 评论 -
剑指Offer(22)--从上往下打印二叉树
文章目录题目描述思路以及解答题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路以及解答主要的思路是借助队列,先把当前元素放进队列,然后不断取出元素,取出元素的时候,同时处理其左子树和右子树,将其放到队列中。直到队列是空的。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/**public class TreeNode { int val = 0; Tr原创 2020-07-26 22:56:44 · 240 阅读 · 0 评论 -
剑指Offer(21)--栈的压入、弹出序列.md
文章目录题目描述思路以及解析题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路以及解析主要是模拟这个过程,先把压栈的挨个压入栈中,每压入一个,则找弹出顺序队列的当前元素是否与栈顶元素相等,相等则弹出。直到最后数据应该是空的,则表明两个顺序是原创 2020-07-26 22:53:38 · 263 阅读 · 0 评论 -
剑指Offer(20)--包含min函数的栈
文章目录题目描述思路以及解答题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路以及解答主要是两个栈,一个存储所有元素的datas stack,一个存储最小值 mins stack。push一个元素的时候,都需要push进datas stack,但是push进入mins stack需要满足条件:当前的mins stack是空的,直接放入。或者当前的mins stack的栈顶元素大于或者等于push进来的值。pop一个元素的时候,如果栈原创 2020-07-26 22:48:31 · 283 阅读 · 0 评论 -
剑指Offer(19)--顺时针打印矩阵
文章目录题目描述思路与解析题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路与解析这道题难度在于如何正确地处理边界情况,下面我们使用的是不断缩小矩阵上,下,左,右四个边界的方法。首先定义一个up(上边界为0),down(下边界为matrix.length - 1),lef原创 2020-07-26 22:47:27 · 254 阅读 · 0 评论 -
剑指Offer(18)--二叉树的镜像
文章目录题目描述思路与解答题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思路与解答使用递归,直接将左子树反转,右子树反转,交换即可。值得注意的是,反转后的结果需要先保存,左右两个都反转之后,才能赋值。/**public原创 2020-07-18 11:55:53 · 260 阅读 · 0 评论 -
剑指Offer(17)--树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路先找到相同的根节点,然后递归判断左子树和右子树即可。public static boolean HasSubtree(TreeNode root1, TreeNode root2) { // 只要一个为null,则返回false if (root1 == null || root2 == null) { return false; } // 从当前根节原创 2020-07-18 11:50:33 · 228 阅读 · 0 评论 -
剑指Offer(16)--合并两个排序的链表
文章目录题目描述思路以及解析题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路以及解析思路比较清晰,首先创建一个-1节点的新链表,然后两个链表都从头开始,循环到直到一个链表遍历到最后,谁的节点小,就加入新的链表后面。然后遍历两个链表剩下的元素,这些元素肯定比另一个链表的所有元素都大或者相等,直接加入新的链表后面即可。 public ListNode Merge(ListNode list1,ListNode list2) {原创 2020-07-18 02:03:50 · 283 阅读 · 0 评论 -
剑指Offer(15)--反转链表
文章目录题目描述思路与解答题目描述输入一个链表,反转链表后,输出新链表的表头。思路与解答首先,使用循环解答,不断把指向下一个的指针,指向前面的。假设链表是1->2->3->4,那么执行一次循环里面的内容的图示如下:直到head==null的时候,返回first即可。 public static ListNode ReverseList(ListNode head) { if (head == null) { return head原创 2020-07-17 22:18:18 · 260 阅读 · 1 评论