暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
数据结构与算法之美-7-链表-下
775
16页
1次
2019-12-09
5墨值下载
10/9/2018 极客时间 | 数据结构与算法之美
https://time.geekbang.org/column/article/41149 1/16
讲堂 数据结构与算法之美 文章详情
07 | 链表(下):如何轻松写出正确的链表代码?
2018-10-05 王争
07 | 链表(下):如何轻松写出正确的链表代码?
朗读人:修阳 12′30′′ | 5.73M
上一节我讲了链表相关的基础知识。学完之后,我看到有人留言说,基础知识我都掌握了,但是
写链表代码还是很费劲。哈哈,的确是这样的!
想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合
并等,写的时候非常容易出错。从我上百场面试的经验来看,能把“链表反转”这几行代码写对
的人不足 10%。
为什么链表代码这么难写?究竟怎样才能比较轻松地写出正确的链表代码呢?
只要愿意投入时间,我觉得大多数人都是可以学会的。比如说,如果你真的能花上一个周末或者
一整天的时间,就去写链表反转这一个代码,多写几遍,一直练到能毫不费力地写出 Bug free
的代码。这个坎还会很难跨吗?
当然,自己有决心并且付出精力是成功的先决条件,除此之外,我们还需要一些方法和技巧。我
根据自己的学习经历和工作经验,总结了几个写链表代码技巧。如果你能熟练掌握这几个技巧,
10/9/2018 极客时间 | 数据结构与算法之美
https://time.geekbang.org/column/article/41149 2/16
加上你的主动和坚持,轻松拿下链表代码完全没有问题。
技巧一:理解指针或引用的含义
事实上,看懂链表的结构并不是很难,但是一旦把它和指针混在一起,就很容易让人摸不着头
脑。所以,要想写对链表代码,首先就要理解好指针。
我们知道,有些语言有“指针”的概念,比如 C 语言;有些语言没有指针,取而代之的是“引
用”,比如 Java、Python。不管是“指针”还是“引用”,实际上,它们的意思都是一样的,
都是存储所指对象的内存地址。
接下来,我会拿 C 语言中的“指针”来讲解,如果你用的是 Java 或者其他没有指针的语言也没
关系,你把它理解成“引用”就可以了。
实际上,对于指针的理解,你只需要记住下面这句话就可以了:
将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储
了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。
这句话听起来还挺拗口的,你可以先记住。我们回到链表代码的编写过程中,我来慢慢给你解
释。
在编写链表代码的时候,我们经常会有这样的代码:p->next=q。这行代码是说,p 结点中的
next 指针存储了 q 结点的内存地址。
还有一个更复杂的,也是我们写链表代码经常会用到的:p->next=p->next->next。这行代码
表示,p 结点的 next 指针存储了 p 结点的下下一个结点的内存地址。
掌握了指针或引用的概念,你应该可以很轻松地看懂链表代码。恭喜你,已经离写出链表代码近
了一步!
技巧二:警惕指针丢失和内存泄漏
不知道你有没有这样的感觉,写链表代码的时候,指针指来指去,一会儿就不知道指到哪里了。
所以,我们在写的时候,一定注意不要弄丢了指针。
指针往往都是怎么弄丢的呢?我拿单链表的插入操作为例来给你分析一下。
of 16
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜