版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、108108| 链表(下:如何轻松写出正确的直练到能毫不费力地写出 Bug free 的代码。这个坎还会很难跨吗?当然,自己有决心并且付出精力是成功的先决条件,除此之外, 还需要一技巧一:理解指针的含知道,有些语言有“指针”的概念,比如C 语言;有些语言没有指针,取而”,比如 Java、接下来,我会拿C 语言中的“指针”来讲解,如果你用的是Java 或者其他没有来说,指针中 了这个变量的内存地址,指向了这个变量,通过指针就能找这句话听起来还挺拗口的,你可以先记住。 回到链表代码的编写过程中,初学者经常会在这儿犯错。p-next 指针在完成第一步操作之后,已经不再指 向结点 初学者经常会在这儿犯
2、错。p-next 指针在完成第一步操作之后,已经不再指 向结点 b 了,而是指向结点 x。第 2 行代码相当于将 x 赋值给 x-next,自2p-next = x; 将 p的 next指针指向 xx-next = p-next; 将 x的结点的 next指针指向 b代说,p 结点中的 next 指针了 q 结点的内存地址。还有一个更复杂的,也写链表代码经常会用到的p-next=p-next-next。这行代码表示,p 结点的 next 指针了p 结点技巧二:警惕指针丢失和内存指针往往都是怎么弄丢的呢?我拿单链表操作为例来给你分析一下希望在结点 a 和相邻的结点 b 之间结点x,假设当前指针
3、p 指向结点 a。如果3p-next = p-next-代再来看单链表结点删除操作。如果要删除结点 p 的后继结点,3p-next = p-next-代再来看单链表结点删除操作。如果要删除结点 p 的后继结点,if(head=null) head = new_node;代但是,当 要向一个空链表中 第一个结点,刚刚的逻辑就不能用了。我head 表示链表的头结点。所以,从这段代码, 可以发现,对于单链表的 操作,第一个结点和其他结点的插new_node-next=p-next; p-next = new_node;代己指向自己。因此,整个链表也就断成了两半,从结点b 往后的所有结点都无对于有些语
4、言来说,比如 C 语言,内存管理是由程序员负责的,如果没有手定要注意操作的顺序,要先将结点 x 的 next 指针指向结点 b,再把结点 a的 next 指针指向结点 x,这样才不会丢失指针,导致内存泄漏。所以,对于只需要把第1 行和第2 行代码的顺序颠倒一下就可以。当然,对于像 Java 这种虚拟机自动管理内存的编程语言来技巧三:利用哨兵简化实现难在结点p 后面插要删除链表中的最后一个结点,前面的删除代码就不 4要删除链表中的最后一个结点,前面的删除代码就不 4第一个结点和删除最后一个结点的情况进行特殊处理。这样代码实现起还记得如何表示一个空链表吗?head=null 如果 引入哨兵结点,在
5、任何时候,不管链表是不是空,head 指针都会一直指向这个哨兵结点。 也把这种有哨兵结点的链表叫 链表。相反,没有哨兵结点的链表就叫作不 链表。我画了一个 链表,你可以发现,哨兵结点是不 数据的。因为哨兵结点一直存在,所以 第一个结点和 其他结点,删除最后一个结点和删除其他结点,都可以 为相同的代码实现逻辑了。如 排序、归并排序、动态规划等。这些内容 后面才会讲,现在为了让你感受更深,我再举一个非常简单的例子。代码我是用 C 语言实现的,不涉if(head-next=null) head = null;代代码二5对比两段代码,在字符串a 代码二5对比两段代码,在字符串a 很长的时候,比如几万、
6、几十万,你觉得哪段代码是代码二,因为两段代码中执行次数最多就是 while 循通过一个哨兵 an-1 = key,成功省掉了一个比较语句 in,不要小看这一条语句,当累积执行万次、几十万次时,累积样的代码,因为可读性太差了。大部分情况下, 并不需要如此追求极致的inf find(char* a,key) if (an-1 = key) return n-chartmp=an-1; an-1 = key;i = while (ai != key) an-1 = if(i=n-1)return-1; return i;代find(char* a,n,charkey) i = 0;while (i n) if(ai=key) return i;return -代66技巧五:举例画图,辅助思技巧四:重点留意边界条件处Bug。链表代码也不例外。要实现没有 Bug 的链表代码,一定要在编写的过程中以及编写完成7内容小这节我主要和你讲了写出正确链表代码的六个技巧。分别是理解指针或 7内容小这节我主要和你讲了写出正确链表代码的六个技巧。分别是理解指针或 的链的检删除链表倒数第 n 看图写代码,是不是就简单多啦?而且,当 写完代码之后,也可以举几个例子,画在纸上,照着代码走一遍,很容易就能发现代码中的 Bug。技巧六:多写多练,没有捷现在我写这些代码,简
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购销售业务制度
- 采购预算论证制度
- 金蝶采购付款制度及流程
- 钢结构材料采购制度
- 苏教版小升初数学招生考试常考易错题汇编卷(二)(含答案)
- 北京节气民俗文化移动应用《岁时节令》的设计研究
- 第20章 勾股定理 单元测试(原卷版A4)-人教版(2024)八下
- 2026年政府购买服务合同(1篇)
- 试用协议书(15篇)
- 双方合作协议书(集锦14篇)
- 2025年安徽林业职业技术学院单招职业适应性测试题库带答案解析
- 麻醉药健康宣教
- DB31∕T 1597-2025 老年人屈光不正社区筛查规范
- 蜱虫防治教学课件
- 药品供应链管理与安全
- 2025年初级特种消防车驾驶员《理论知识》考试真题(含新版解析)
- 酒店弱电系统建设项目可行性研究报告
- 水箱安装专项施工计划
- 购买资产包的合同范本
- 2025中国电信集团有限公司秋季校园招聘笔试历年参考题库附带答案详解
- DB32∕T 3848-2020 有限空间作业安全操作规范
评论
0/150
提交评论