三分钟,拿下链表!

欢迎回来,这篇文章我们来回顾一下之前我们所讲的链表的基础知识。关于链表,到目前为止,我们做了 4 道题目,相应的文章链接我也放在这里了,有空你可以去看看:

可以说,链表最基础的知识点都在这几道题目里得到了体现。如果你观察仔细,你会发现,按着上面的顺序,这几道题目,或者说这几篇文章刚好对应着链表的增删改查。也就是我们平时所说的 CRUD。说到这里,可能有些小伙伴按捺不住了,会说,"CRUD 还用你讲?怕我平时搬砖搬不够?"

确实,不知道从什么时候起,CRUD 变成了一个程序员自我调侃的负面词汇。常常能听到这样的话,“工作了几年,平日里都在 CRUD,技术根本没有提高”,“基本上都在 CRUD,自我成长受限” ... 当然了,这种话平时和朋友同事们调侃几句倒没什么,但如果真当真的话,那可就太片面了。

首先,单说 CRUD 这个词其实太宽泛。几乎只要和数据相关,都会涉及到 CRUD。从宏观上来看,一个 APP 除了 UI 界面以外,剩下的不就是对数据的存取和整理吗?只是说,在不同的场景和需求下,这个东西的难易程度有天壤之别。比如,有每秒千万级的请求,如何更好地去做 CRUD?读写同时存在的业务场景,CRUD 如何更好地去加锁?如何更好地去加事务?很多时候,难的事情和简单的事情的区别仅仅在于需求和场景,跟事情本身并没有太大的关系

其次,做任何事情,不管事情的难易程度如何,都有做的好与不好之分。有的人口口声声说 CRUD 简单,甚至觉得这东西有点侮辱自己的智商,但写出来的东西却 bug 频出,三天两头要返工。而有的人写 CRUD 代码,把所有的情况考虑的滴水不漏,码出来的代码过了 5 年,甚至是 10 年后,都还一直在跑。同样的事情,不同的结果,这之中反应的更多的是一个态度的问题。还有就是,再简单不过的事情,你想要做得出类拔萃也并非易事。

上面这几道题目,可能经常刷题的朋友会觉得非常简单,毫不夸张地说,基本上 3 分钟做完一道题。但我想问的是,做题的时候,你究竟是在思考问题,还是在把自己脑子里背好的答案给敲出来?既然你都知道题目的答案了,谈何难度呢?

另外,基于我面试别人的经验,我可以很负责任的说,上面这几题对于那些没怎么系统刷过题的人来说,可能并不简单。我就不止一次地用 反转链表 这道题目来作为面试题,发现做不出来的大有人在。印象深刻的是在某次面试中问一个大哥这道题目,他项目经历非常丰富,交谈当中我也觉得他各方面都挺不错,给我印象挺好。在算法上就想着走走过场,没想太为难他,于是就让他反转一个单链表。在我感觉,他是没咋系统刷过题,前前后后,我各种补充说明,各种提示,他各种确认加修改,硬是把一道算法题盘成了系统设计的架势。最后弄出来的代码算是把样例跑过了,不过他整出来的 4,5 个指针也算是把我给整懵逼了。到了给评价的时候,还真把我难住了,不知咋给,最后给了比较中立的评价。

当然了,关于面试,以后有机会我会出文章详细说说。这里主要还是想告诉大家,题目在你看来的难度,其实很主观,也很可能并不真实。我们做题的目的是学习那些有迹可循的解决问题的方法,还有就是学习那些思考问题的模式与角度,而不是去为了做对一道题目而做题,这除了自嗨,并没有实际的意义。

扯远了,回到链表上面来,链表的基础其实就是链表的 CRUD。其实大多数情况下,学习一个数据结构,最先学的都是 CRUD,比如说哈希表,你最先学的肯定是如何存取,不会一上来就对着哈希函数开整。有了基础,下一步,我们就得思考如何更好的 CRUD,比如说在某一场景下,如何更有效率地 CRUD?这个光靠了解单一的数据结构是不够的,得横向对比,比如这里我们就屡次拿链表和数组作对比:


数组 单链表(含尾指针)
从尾部插入 O(1) O(1)
从头部插入 O(n) O(1)
查找 O(1) O(n)
从尾部删除 O(1) O(1)
从头部删除 O(n) O(1)

总的来说就是,链表修改更快,数组查询更快。到底该用哪个,这个得取决于应用场景。当然了,这两个数据结构还可以结合起来变成高阶的数据结构,比如后面我们会讲到的 哈希表

接下来,我们会尝试着去解决一些链表当中的难题。如果之前的内容你都理解透彻了,你会发现,这里所谓的难题,其实只是我们讲的那些方法的灵活应用+花样组合。当然,如果你对之前的内容理解的还不够透彻,最好是在不看答案的前提下,把之前文章中提到的例题给做一遍。毕竟,饭得一口一口吃,路得一步一步走呀!

欢迎关注我的公众号,如果喜欢,麻烦点一下“在看”,您的在看是我坚持更新的动力:)

本文分享自微信公众号 - 五分钟学算法(CXYxiaowu)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章