剑指Offer笔试面试题
奋斗啦哈
这个作者很懒,什么都没留下…
展开
-
删除单链表的第i个位置的结点
删除单链表的第i个位置的结点,首先需要判断是不是空链表,其次判断删除位置是否合法,最后判断是不是删除第一个结点,实现过程如下所示:package cn.edu.nwu.structs.linklist;/** * @author jcm * 删除链表第i个位置的结点 * 时间 2016年8月23日 */public class DeleteLinkListNode { pub原创 2016-08-23 14:52:22 · 6258 阅读 · 1 评论 -
二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析可知,由于数组已经是有序的,所以查找时,只要从最右上方开始遍历,当目标值大于最右边值,说明内循环的所有数都小于目标值,直接break跳出内循环。实现过程如下所示:/** * @author jc原创 2016-08-24 17:30:58 · 227 阅读 · 0 评论 -
调整数组的顺序使奇数位于偶数的前面
调整数组的顺序使奇数位于偶数的前面,使用快速排序的思想来完成功能。实现过程如下所示:/** * @author jcm * @see 调整数组的顺序使奇数位于偶数的前面 * @param arr 数组 */ public static void reOrder(int[] arr){ int length = arr.length; if(length==0 ||原创 2016-08-24 16:14:27 · 254 阅读 · 0 评论 -
线性表顺序存储结构实现
线性表顺序存储是指用一组地址连续的存储单元依次存放线性表中的各个元素,使得线性表中在结构上相邻的数据元素存储在相邻的物理存储单元中。定义顺序存储结构如下所示:#define MAXSIZE =100typedef struct{ int data[MAXSIZE]; int length;} List线性表的顺序查找,找到元素则返回值元素的位置,如果没有找到返回0原创 2016-04-02 20:48:19 · 684 阅读 · 0 评论 -
头插法尾插法创建单链表和遍历单链表
单链表是有数据域和指针域结点组成的,所以要创建单链表,需要定义结点。定义结点如下所示:package structs.link;/** * @author jcm * *时间 2016年8月21日 */public class Node { public Object data;//数据域 public Node next;//指向下一个结点的指针域 public Node(原创 2016-08-22 16:14:54 · 2263 阅读 · 0 评论 -
判断链表是不是循环链表
为了验证链表是不是循环链表,首先要创建循环链表,其次是打印循环链表,验证循环链表是不是创建成功,最后写函数判断是不是循环链表。创建循环链表代码如下所示: /** * @author jcm * @see 创建循环链表 * @param list */ public void createCircularLinkList(Node head) { //构建循环链表原创 2016-08-23 23:34:23 · 1880 阅读 · 0 评论 -
二叉搜索树转换为双向链表
二叉搜索树转换为双向链表,实现过程如下所示:package cn.edu.nwu.structs.tree;/** * @author jcm * 将一颗平衡二叉树转化为双链表 * 时间 2016年9月1日 */public class BinaryTreeToLinkList { public static void main(String[] args) { Binar原创 2016-09-01 14:36:33 · 271 阅读 · 0 评论 -
从尾到头打印链表
从尾到头打印链表,由于单链表只有一个指针,而且是单向的访问。所以要用栈或者递归来实现从尾到头打印单链表。用栈和递归实现如下所示:package cn.edu.nwu.structs.linklist;import java.util.ArrayList;import java.util.Stack;/** * @author jcm * *时间 2016年8月22日 */p原创 2016-08-24 20:45:06 · 560 阅读 · 0 评论 -
求单链表结点个数
要获取单链表结点个数,需要判断单链表是不是空链表,如果是空链表,则返回0,如果不是,遍历单链表,定义当前结点指向头指针,然后while循环,只要满足当前结点不等于null,结点长度加1。实现过程分别是循环遍历和递归循环遍历实现过程如下所示:package cn.edu.nwu.structs.linklist;/** * @author jcm * *时间 2016年8月23日原创 2016-08-22 17:07:22 · 8022 阅读 · 0 评论 -
查找并输出单链表的倒数第k个结点
要输出单链表的倒数第k个结点,可以先遍历整个链表,求出链表大小,假设链表大小是n,再次遍历链表n-k+1次,这个链表就是我们要输出的链表结点,但是发现实现这个功能需要遍历两次。改进一次遍历完成输出倒数第k个结点,这里用两个结点指针实现一次遍历,先让第一个结点指针遍历k-1次,然后同时让两个结点指针同时移动,始终使两个结点指针结点相差是k-1个,直到第一个结点指针到达链表表尾,那么第2个结点指针是要原创 2016-08-22 19:14:53 · 692 阅读 · 0 评论 -
合并两个有序递增的链表,使得合并后新链表还是有序的
合并两个有序递增的单链表,使得合并后,新链表也是递增有序的。这里分别使用循环、递归实现合并有序链表循环实现链表合并和递归实现链表的合并如下所示:package cn.edu.nwu.structs.linklist;/** * @author jcm * *时间 2016年8月22日 */public class MergeLinkList { /** * @author原创 2016-08-22 21:29:30 · 1709 阅读 · 0 评论 -
单链表的反转(用循环和递归实现单链表反转)
单链表的反转,首先要考虑,如果链表是空链表或者是一个链表,则不需要反转。其次要考虑反转时,需要三个指针,分别是前一个指针,当前指针,和下一个指针。最后要把头结点指针的指向赋值null,同时头结点指针重新指向前一个指针。分别用非递归和递归实现单链表反转。循环实现单链表反转:package cn.edu.nwu.structs.linklist;/** * @author jcm *原创 2016-08-23 18:46:34 · 956 阅读 · 0 评论 -
单链表的中间结点
单链表的中间结点,首先需要判断链表的长度,当链表的长度少于3时,则返回null,其次定义两个指针,让一个指针firstNode走两步,另一个指针secondNode走一步,当firstNode指针走到链表的尾部时,返回secondNode指针。实现过程如下所示:package cn.edu.nwu.structs.linklist;/** * @author jcm * *时间 2原创 2016-08-23 19:22:59 · 401 阅读 · 0 评论 -
在O(1)时间删除链表结点
在O(1)时间删除链表结点,首先分析链表是不是空的,其次要分析要删除的结点是否存在,最后分析链表是不是要删除的尾结点。其实现过程如下所示:package cn.edu.nwu.structs.linklist;/** * @author jcm * *时间 2016年8月28日 */public class DeleteNode { /** * @author jcm原创 2016-08-24 15:26:26 · 250 阅读 · 0 评论 -
在单链表的第i个位置插入一个新结点
在单链表的第i个位置插入一个新结点,首先要判断链表是不是空的,其次要找到链表的第i-1个结点位置,最后还要考虑是不是在第1个位置插入一个数据元素,要注意是不是尾结点后一位插入一个新结点。实现过程如下所示:package cn.edu.nwu.structs.linklist;/** * @author jcm * *时间 2016年8月23日 */public class In原创 2016-08-23 14:03:29 · 15223 阅读 · 0 评论 -
二叉树的最大距离
二叉树的最大距离,要求二叉树的最大距离,需要借助深度来判断,这里我创建了一个定义深度和结点距离的类,如下所示:/** * @author jcm * 二叉树的最大距离 *时间 2016年8月26日 */class DepthAndDistance{ public int maxDepth; public int maxDistance; public DepthAndDista原创 2016-08-26 15:28:57 · 531 阅读 · 0 评论