- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
07|链表(下):如何轻松写出正确的链表代码?
07|链表(下):如何轻松写出正确的链表代码?
上一节我讲了链表相关的基础知识。学完之后,我看到有人留言说,基础知识我都掌握了,但是写链表代码还是很费劲。哈哈,的确是这样的!
想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合并等,写的时候非常容易出错。从我上百场面试的经验来看,能
“ ” 10%
把 链表反转 这几行代码写对的人不足 。
为什么链表代码这么难写?究竟怎样才能比较轻松地写出正确的链表代码呢?
只要愿意投入时间,我觉得大多数人都是可以学会的。比如说,如果你真的能花上一个周末或者一整天的时间,就去写链表反转这一个代码,多写几遍,一直练
到能毫不费力地写出Bug free的代码。这个坎还会很难跨吗?
当然,自己有决心并且付出精力是成功的先决条件,除此之外,我们还需要一些方法和技巧。我根据自己的学习经历和工作经验,总结了几个写链表代码技巧。
如果你能熟练掌握这几个技巧,加上你的主动和坚持,轻松拿下链表代码完全没有问题。
技巧一:理解指针或引用的含义
事实上,看懂链表的结构并不是很难,但是一旦把它和指针混在一起,就很容易让人摸不着头脑。所以,要想写对链表代码,首先就要理解好指针。
“ ” C “ ” Java Python “ ” “ ”
我们知道,有些语言有 指针 的概念,比如 语言;有些语言没有指针,取而代之的是 引用 ,比如 、 。不管是 指针 还是 引用 ,实际上,它们的意思
都是一样的,都是存储所指对象的内存地址。
C “ ” Java “ ”
接下来,我会拿 语言中的 指针 来讲解,如果你用的是 或者其他没有指针的语言也没关系,你把它理解成 引用 就可以了。
实际上,对于指针的理解,你只需要记住下面这句话就可以了:
将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这
个变量。
这句话听起来还挺拗口的,你可以先记住。我们回到链表代码的编写过程中,我来慢慢给你解释。
p-next=q p next q
在编写链表代码的时候,我们经常会有这样的代码: 。这行代码是说, 结点中的 指针存储了 结点的内存地址。
p-next=p-next-next p next p
还有一个更复杂的,也是我们写链表代码经常会用到的: 。这行代码表示, 结点的 指针存储了 结点的下下一个结点的内存地址。
掌握了指针或引用的概念,你应该可以很轻松地看懂链表代码。恭喜你,已经离写出链表代码近了一步!
技巧二:警惕指针丢失和内存泄漏
不知道你有没有这样的感觉,写链表代码的时候,指针指来指去,一会儿就不知道指到哪里了。所以,我们在写的时候,一定注意不要弄丢了指针。
指针往往都是怎么弄丢的呢?我拿单链表的插入操作为例来给你分析一下。
file:///F/temp/geektime/数据结构与算法之美/07链表(下):如何轻松写出正确的链表代码?.html[2019/1/15 15:35:17]
07|链表(下):如何轻松写出正确的链表代码?
a b x p a
如图所示,我们希望在结点 和相邻的结点 之间插入结点 ,假设当前指针 指向结点 。如果我们将代码实现变成下面这个样子,就会发生指针丢失和内存泄露。
p-next = x; // 将p的next指针指向x结点;
x-next =
您可能关注的文档
- 01为什么要学习数据结构和算法?.pdf
- 02如何抓住重点,系统高效地学习数据结构与算法?.pdf
- 03复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?.pdf
- 04复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度.pdf
- 06链表(上):如何实现LRU缓存淘汰算法.pdf
- 05数组:为什么很多编程语言中数组都从0开始编号?.pdf
- 08栈:如何实现浏览器的前进和后退功能?.pdf
- 11排序(上):为什么插入排序比冒泡排序更受欢迎?.pdf
- 09队列:队列在线程池等有限资源池中的应用.pdf
- 10递归:如何用三行代码找到“最终推荐人”?.pdf
- 2024年中国钽材市场调查研究报告.docx
- 2024年中国不锈钢清洗车市场调查研究报告.docx
- 2024年中国分类垃圾箱市场调查研究报告.docx
- 2024年中国水气电磁阀市场调查研究报告.docx
- 2024年中国绿藻片市场调查研究报告.docx
- 2010-2023历年初中毕业升学考试(青海西宁卷)数学(带解析).docx
- 2010-2023历年福建厦门高一下学期质量检测地理卷.docx
- 2010-2023历年初中数学单元提优测试卷公式法(带解析).docx
- 2010-2023历年初中毕业升学考试(山东德州卷)化学(带解析).docx
- 2010-2023历年初中毕业升学考试(四川省泸州卷)化学(带解析).docx
文档评论(0)