初级算法实践之链表、树、排序

栏目: 编程工具 · 发布时间: 7年前

内容简介:之前已经介绍了《今天本打算介绍链表篇,但是发现大多数链表题都介绍了。这里就给大家介绍链表、树、排序三种数据结构常见的题型,并找一道例题给大家讲解一下。

零、背景

之前已经介绍了《 初级算法实践之数组篇 》和《 初级算法实践之字符串篇 》。

今天本打算介绍链表篇,但是发现大多数链表题都介绍了。

这里就给大家介绍链表、树、 排序 三种数据结构常见的题型,并找一道例题给大家讲解一下。

一、删除链表的倒数第N个节点

对于链表,常见的题其实不多。

比如反转、合并有序链表、排序、判断是否有环等等。

这里分享一个从链表删除节点的题。

题意:给一个链表,删除链表倒数第 n 个节点,并返回链表头。

思路:标准的做法是先得到链表的长度,然后计算出应该删除正序第几个,然后循环找到那个节点的父节点,进行删除。

而这里我介绍一种递归的写法。

递归的时候,对子链表节点个数进行统计,返回值为计算后的链表头节点。

计算逻辑则为判断当前子链表的头时候需要删除,需要则删除把下一个节点当做链表头。

初级算法实践之链表、树、排序

二、对称二叉树

对于树,一般都是二叉树或者二叉搜索树上的问题。

比如树的最大深度、是否是二叉搜索树、遍历二叉树、数组转二叉搜索树等。

这里分享一道判断对称二叉树的题。

题意:给一个二叉树,判断是不是对称二叉树。

思路:递归判断即可。

关键递归的时候处理好左右子树的关系。

1.左子树和右子树要么都为空,要么都有节点。

2.左子树根节点和右子树根节点的值应该相等。

3.左子树的左儿子应该和右子树的右儿子相等。

4.左子树的右儿子应该和右子树的左儿子相等。

具体代码如下。

初级算法实践之链表、树、排序

三、合并两个有序数组

对于数组的练习,实际上在数组篇已经介绍了。

这里再介绍一个双指针的练习题。

题意:给两个有序数组,求将第二个数值合并到第一个数组上,最终结果依旧有序。

要求:时间复杂度 O(n) ,空间复杂度 O(1)

思路:如果没有限制的话,直接把第二个追加到第一个数组,排序即可。

但是这个时间复杂度是 O(n log(n)) 的。

如果我们使用合并排序的思想,则可以在线性时间内完成合并。

具体来说就是,不断的从两个数组里挑选最大的那个数字,挑之后对应的数组偏移量减一。

当其中一个数组为空时,那只能选择另外一个数组里的元素。

初级算法实践之链表、树、排序

四、最后

这篇文章主要介绍一些基础的数据结构和算法。

比如链表题,删除节点往往最有挑战;

树的题型,往往使用递归解决; 数组的题型,则尽量使用双指针思路,扫描一遍来解决问题。

-EOF-


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

思考的技术

思考的技术

[日]大前研一 / 刘锦秀、谢育容 / 中信出版社 / 2010-11 / 32.00元

思路决定出路,没有了思路,也就没有了出路。 在充满危机与冒险的当下,我们缺乏的不是技巧而是揭发事务本质的动力和好奇心,缺少怀疑一切的心态和对固有模式的怠惰。 大前研一凭借他30多年的管理咨询经验,为我们提供了一种全新的可借鉴的思考方式。 企业和个人惟有改变既有的思考模式,放弃对过去成功经验的迷恋,学习有创意的思考方法,方能找到正确的经营思路。一起来看看 《思考的技术》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具