您的位置:首页 > 其它

链表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链接起来。

代码如下:

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 算法 指针