链表004
2015-10-03 21:17
211 查看
题目如下
-设计一个算法, 删除递增有序链表中值大于min(i)且小于max(k)的所有
元素( i和k是给定的两个参数, 其值可以和表中的元素相同, 也可以不同)
算法思路:
-设置三个指针pre,cur,tail,front。front保留最后一个小于等于min的节点,cur用来遍历,tail保留第一个大于等于max的节点,pre保存cur,总是在cur的最前面一位,然后将front和tail链接起来。
代码如下:
-设计一个算法, 删除递增有序链表中值大于min(i)且小于max(k)的所有
元素( i和k是给定的两个参数, 其值可以和表中的元素相同, 也可以不同)
算法思路:
-设置三个指针pre,cur,tail,front。front保留最后一个小于等于min的节点,cur用来遍历,tail保留第一个大于等于max的节点,pre保存cur,总是在cur的最前面一位,然后将front和tail链接起来。
代码如下:
linkList* deleteLink(linkList* head,int min,int max) { linkList* cur = head->next;//指向第一个元素 linkList* front = (linkList*)malloc(sizeof(linkList));//指向最后一个小于等于最小值min的节点 linkList* tail = (linkList*)malloc(sizeof(linkList));//指向最后一个大于等于最大值max的节点 linkList* pre = (linkList*)malloc(sizeof(linkList));//保存cur,总是在cur的最前面一位 //如果链表的第一个数就大于最小值,则pre指向head头结点 if(cur->data > min) { pre = head; } //如果cur->data即当前值小于等于min,则往后推一个,直到cur->data大于min,则pre保存的节点为front节点 while(cur != NULL && cur->data <= min) { pre = cur; cur = cur->next; } front = pre;//front指向pre所在节点 //下同 while(cur != NULL && cur->data <= max) { pre = cur; cur = cur->next; } if(cur == NULL) { front->next = NULL; return head; } tail = cur; front->next = tail; return head; }
相关文章推荐
- [C/C++]反转链表
- 关于指针的一些事情
- 动易2006序列号破解算法公布
- C#实现基于链表的内存记事本实例
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- C# Pointer指针应用实例简述
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- C++智能指针实例详解
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法