题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然时按照递增排序的. 链表结点定义如下: struct ListNode{ int val; ListNode* next; }; 思路: 合并两个递增排序的链表,思想类似于归并排序的merge过程. 1.当两个链表均不为空, 如果链表1头结点的值小于链表2头结点的值,那么链表1的头结点作为新链表的头结点,否则链表2的头结点作为新链表的头结点,链表指针往前走一步: 对两个链表中剩余结点的操作同步骤1一样:(这是一个递归的过程) 2…
合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. *** 思路 如果pHead1和pHead2中有一个为空,则result是另一个: 如果pHead1的头结点值小于pHead2,那么result的头结点为pHead1的头结点,其next为pHead1.next和pHead2比较的结果.同理对pHead2也一样. 因此本题可采用递归的方法. 实现代码 /*function ListNode(x){ this.val = x;…
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的转换.将二叉树中的没个结点的空指针引出一个虚节点,其值为一个特定值,比如说 # 字符,我们成这种处理后的二叉树为原来二叉树的扩展二叉树.扩展二叉树和二叉树是一一对应关系.所以下图的前序的序列化序列为:A B # D # # C # #. 二 . 代码实现与分析 class Solution { pu…
题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链表储存为数组,然后按照数组的索引逆序进行反转.此处,可理解为将链表装换为顺序表,然后把队伍方向反转,但是,此方式比较浪费空间,而且需要两次遍历,效率不占优势. 代码实现: public static Node ReverseList1(Node head) { //指针是否为空判断(鲁棒性) if(…
题目描述 输入一个链表,输出该链表中倒数第k个结点. 一 . 数据结构基础概念普及(线性表). 线性表可分为顺序表与链表,它们是堆栈.队列.树.图等数据结构的实现基础. 顺序表,线性表的顺序存储结构是指:用一块地址连续的存储空间依次存储线性表中的数据元素.他在逻辑上相邻的元素在物理上也是相邻的.什么意思呢,我们可以这样想象,去食堂排队打饭,打饭的队列就是一个顺序表,加粗部分的存储空间指的是我们排队所占据的位置:红色字体所说的概念可以理解为我们打饭的顺序必须要按照从前往后的顺序依次进行,即逻辑顺序…
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. 一 . 方法分析(正常单调递增数组) 1 . 参考二分查找法,我们用两个指针分别指向数组的第一个元素和最后一个元素. 2 . 基于二分查找法的概念,找到数组中间的元素:因为该题目是查找旋转数组中的最小值. 如果该…
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 一 . 分析题目 该题目有几个点需要注意一下: 1 . 这个链表是连续的正数序列,且最少为两个数. 2 . 由于1中的特性,所以数组的和可以用公…
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将  num1[0], num2[0] 设置为返回结果.. 一 . 题目分析 题目说的太笼统,举例分析. 例如:给定的数组是这个:int[] z = new int[8] {2,4,3,6,3,2,5,5 };  因为2/3/5都有两个,所以输出的是num1[0]=4: num2[0]=6.. 分析步骤: 1 . 遍历数组 + 遍历内…
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 一 . 题目分析 首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树.如下图: 所以,知道了这个概念之后,回归题目.判断该二叉树是不是平衡二叉树,就要在二叉树每个节点的深度来搞了,肯定要对二叉树进行遍历,但是如何效率最大化,如果从小往上遍历,一次遍历是否可以完成任务,而从下往上的遍历又让我想到了二叉树唯一的一种自下而上的遍历方法(我说的仅是前后根三种之中而已). 解决方案与关键词:…
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 一 . 思维发散 借助这个题目,我想用一个更好理解的方法说一说递归.借助数学上的小括号来更好的理解递归,我做过小学生家教,记得这应该是小学四年级的题目(符号的计算顺序).直接上图吧. 也许写的不够严谨,但传达的思想没有错,同样采用的是举例法,假设需要递归的函数是法 f(),递归一次就在相应的位置插上一个f(),全部搞定后就变成一个如上图所示的那个了,接下来就是计算顺…