



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
代码删除链表节点的一些例子2008-09-30 16:58:42|分类:常用代码|字号订阅删除链表节点的注意事项:1.如果返回值不是链表头指针,那么入口参数中的链表头指针一定要定义成node *head,调用形式为node *head;DeleteElem(&head);2.注意指针引用运算符(*)的优先级比-的优先级高,所以访问头指针的成员要加括号,写成(*head)-val;3.当算法可能连续删除元素时,要加一个while循环;4.当算法可能连续删除元素时,在出while循环时要判断一下循环指针;*链表节点的定义:struct node int val; node *next;删除普通链表的第一个val为elem的节点:int DeleteElem(struct node *head, int elem)node *p, *q;if (*head)= NULL)return 0;p = *head;q = p - next;if (*head)- val = elem)*head =(*head)- next;free(p);return 1;while (q != NULL)if (q - val = elem)p - next = q - next;free(q);return 1;p = p - next;/由于q被free,所以这两句话只能把q放在左边,而要为q重新赋值。q = p - next;return 0;删除普通链表中倒数第n个元素的程序:int DeleteReverseElem(node *head, int n)int length = 0;node *p = *head;if (*head = NULL)return 0;while (p != NULL)p = p - next;length+;p = *head;if (n = length)*head = (*head) - next;delete p;return 1;int index = length - n - 1;while (index 0)/变量不能搞错,误写成了np = p - next;index-;/循环变量不能忘了自减和自增,细节要注意node *deleteMe = p - next;p - next = deleteMe - next;free(deleteMe);return 1;删除普通链表中的重复元素:初期的复杂版本:int DeleteSameElem(node *head)node *p = *head;if (*head = NULL)return 0;while (p - next != NULL)node *q = p;node *deleteMe = q - next;while (deleteMe != NULL)if (deleteMe - val = p - val)q - next = deleteMe - next;free(deleteMe);while (q - next != NULL & q - next - val = p - val)/考虑到连续删除会跳过一个元素deleteMe = q - next;q - next = deleteMe - next;free(deleteMe);if (q - next = NULL) /这句非常重要,否则到deleteMe = q - next会导致程序崩溃return 1;q = q - next;deleteMe = q - next;/虽然两个指针有关系,但是仍然一个都不能少p = p - next;return 1;简单的多的方法:void RemoveDuplicates(Node *list)if (list = NULL)return;Node *p = list;while (p != NULL)int num = p-num;Node *pBefore = p;Node *deleteMe = p-next;while (pBefore-next != NULL)if (deleteMe-num = num)/直接将删除节点和没有删除节点的情况分开即可pBefore-next = deleteMe-next;delete deleteMe;deleteMe = pBefore-next;else pBefore = pBefore-next; deleteMe = pBefore-next;p = p-next;在普通链表中删除val为elem的全部节点:int DeleteElem(struct node *head, int elem)node *p, *q;if (*head) = NULL)return 0;while (*head) - val = elem)/由于可能连续删除链表头部的元素,所以要写成循环的形式p = *head;*head = (*head) - next;free(p);p = *head;q = p - next;while (q != NULL)if (q - val = elem)p - next = q - next;free(q);while (p - next != NULL & p - next - val = elem)q = p - next;p - next = q - next;free(q);if (p - next = NULL) /这句非常重要,否则到q = p - next会导致程序崩溃return 1;p = p - next;q = p - next;return 1;在带表头的链表中删除val为elem的全部节点:int DeleteElem(struct node *head, int elem)node *p, *q;if (*head) = NULL)return 0;p = *head;q = p - next;while (q != NULL)if (q - val = elem)p - next = q - next;free(q);while (p - next != NULL & p - next - val = elem)/考虑到连续删除会跳过一个元素q = p - next;p - next = q - next;free(q);p = p - next;q = p - next;return 1;删除普通链表中指定地址的节点:由于提供了删除节点的地址,所以这时只要一个指针就可以完成删除!int DeleteElement(node *head, node *deleteMe) node *elem = *head; if (deleteMe = *head) *head = elem - next; free(deleteMe); ret
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乙烯-醋酸乙烯共聚乳液(VAE)装置操作工抗压考核试卷及答案
- 碳九石油树脂装置操作工职业技能考核试卷及答案
- 光纤熔接接头抗潮气测试工艺考核试卷及答案
- 矿灯和自救器管理工质量追溯知识考核试卷及答案
- 动画制作员数字化技能考核试卷及答案
- 高尔夫球童上岗考核试卷及答案
- 医学影像技术专业试题及答案
- 安全生产知识2023新规要点及标准试卷
- 应变能力面试题库及答案
- 银行职员日常考试题库及答案
- 新能源材料与器件导论绪论
- 和大人一起读
- 2023届高考统编版历史三轮冲刺复习:中国赋税制度的演变-选择题刷题练习题(含答案解析)
- 婴幼儿发展高职全套教学课件
- 重污染天气应急减排措施“一厂一策”实施方案
- 【课件】二十四节气和日晷(人教版2019选择性必修1)
- 2023年广东外语外贸大学考研英语练习题100道(附答案解析)
- 医古文课件 2华佗传
- 大数据与会计专业人才需求与专业调研报告
- 高中日语宣讲 试听课件
- 小学信息技术新课程标准测试模拟试题及答案
评论
0/150
提交评论