单链表删除元素
2016-04-17 22:13
246 查看
已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试设计一个高效的算法,删除表中所有值大于mink和且小于maxk的元素
(若表中存在这样的元素),同时释放被删结点空间(注意:mink和maxk是给定的两个参变量。它们的值可以和表中的元素相同,也可以不同)
思路:找到第一个大于mink的数,标记位置,再向前找到第一个不小于maxk位置,标记前一个位置,删除两个标记之间的元素,并释放空间
(若表中存在这样的元素),同时释放被删结点空间(注意:mink和maxk是给定的两个参变量。它们的值可以和表中的元素相同,也可以不同)
思路:找到第一个大于mink的数,标记位置,再向前找到第一个不小于maxk位置,标记前一个位置,删除两个标记之间的元素,并释放空间
#include <stdio.h> #include <stdlib.h> #define N 8 #define DataType int struct SqList{ DataType data; struct SqList *next; }SqList; void AddNode(struct SqList* &head) { int i = 0; // struct SqList *q = s;//引用一个空指针会出问题 // for(i=0;i<N;i++) // { // scanf("%d",&(q->data)); // q->next = (struct SqList *)malloc(sizeof(SqList)); // q = q->next; // } // q = NULL;//无法将一个已经存开辟空间的指针强制转换成NULL // while(1)//不加头结点 // { // scanf("%d",&(q->data)); // if(i < N-1) // { // q->next = (struct SqList *)malloc(sizeof(SqList)); // q = q->next; // } // else{ // break; // } // i ++; // } // q->next = NULL; struct SqList *q = head; for(i = 0;i < N;i ++) { //q = q->next;//游离指针不可赋值给其它指针, q->next = (struct SqList *)malloc(sizeof(SqList)); q = q->next; scanf("%d",&(q->data)); } q->next = NULL; } void ShowList(struct SqList* head) { struct SqList *p = head->next; while(p) { printf("%d ",p->data); p = p->next; } } void DeleteNode(struct SqList* &head,int mink,int maxk)//要加头结点,否则如果要删除首结点则不易删除 { struct SqList *p = head,*q = NULL,*tmp,*tmp1; while(p->next && p->next->data <= mink)//p指向最后一个不大于mink的元素 p = p->next; if(p->next)//如果还有比mink更大的元素 { q = p->next; while(q && q->data < maxk)//q指向第一个不小于maxk的元素 q = q->next; //删除结点并释放空间 tmp = p->next; while(tmp != q) { tmp1 = tmp->next;//先暂时保存待释放结点的下一个结点 free(tmp); tmp = tmp1; } p->next = q; } } int main() { struct SqList *head = (struct SqList *)malloc(sizeof(SqList));//链表名和重定义名应该相同 int mink = 5,maxk = 16; AddNode(head); //ShowList(head); DeleteNode(head,mink,maxk); ShowList(head); return 0; } //1 2 5 7 10 19 23 26 //5 16 //3 25 //0 23 //0 27
相关文章推荐
- Office——检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败
- T-SQL 数据库的创建
- ecshop提示Strict Standards: Non-static method cls_image::gd_version()
- 52_保存Activity的状态
- 广度搜索-1013
- jmeter响应数据中文乱码问题
- PEP8 Python 编码规范整理
- Android adb的基本命令
- 南京理工大学第八届程序设计大赛(校外镜像)
- 我想我要做点什么
- 50_Android安全机制
- Java垃圾收集的相关知识
- 单核CPU画正弦曲线
- 南京理工大学第八届程序设计大赛(校外镜像)
- EC修炼之道—按键的做法
- (OK) digui-gb18030-utf8.sh——递归
- Qt学习记录--04 Qt的对话框介绍
- java数据库连接类,已经把数据库操作的方法都封装好了
- iOS 阅读唐巧博客心得
- 20159318 《网络攻击与防范》第七周学习总结