链表004

  • 题目如下
    -设计一个算法, 删除递增有序链表中值大于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;

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值