单链表的删除

博客围绕含头节点且元素值递增的单链表展开,介绍函数DeleteList的功能,即删除链表中值大于minK且小于maxK的元素。分析了实现该功能所需的临时指针及操作过程,包括指针移动、节点删除和空间释放等,还提及了具体实现代码和删除过程图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已知单链表L含有头节点,且节点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于mink且小于maxK的元素,若找到,则逐个删除,同时释放被删节点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。
例如,某单链表如下图(a)所示。若令minK为20、maxK为50,则删除后的链表如图(b)所示。

在这里插入图片描述

链表节点类型定义如下:
    typedef struct Node{
    int data;
    struct Node *next;
    }Node, *LinkList;
    [C函数]
    int DeleteList (LinkList L, int minK, int maxK)
    {  /*在含头节点的单链表L中删除大于minK且小于maxK的元素*/
      Node   *q=L, *p=L->next;  /*p指向第一个元素节点*/
    int delTag=0;
    while (p)
    if  (P->data <= minK)
    {q=p; 
    p= p->next    ;
      }
    else
    if (p->data < maxK)  {  /*找到删除满足条件的节点*/
    q->next= p->next   ;  
    free(p);
    p=  q->next   ;
     delTag=1;
    }
    else  break;
    if (   delTag=0   )
     return -1;
    return 0;
    }

分析:函数DeleteList(LinkList L, int minK, int maxK)的功能是在L在含头节点的单链表L中删除大于minK且小于maxK的元素,因此除了头指针L以外,至少还需要两个临时指针,一个用于遍历链表中的元素,另外一个用于删除节点时重新链接节点,p和q就起这样的作用。
p指向要被删除的节点、q指向要被删除的节点的前驱节点。
具体过程是:如果删除指针指向的数据不符合删除的条件,那么删除指针和遍历指针向后移动,具体实现的代码是:

q=p; 
 p= p->next ;

含义就是将删除指针的位置”赋值“给遍历指针的位置。然后删除指针指向下一节点。之后在进行节点是否符合条件进行相应的操作判断。
如果符合删除节点的条件,则进行删除操作,具体过程就是:
将遍历指针移动到删除指针前面,然后释放删除指针所指节点的空间。之后再将遍历指针所指像的节点的下一个节点赋值给删除指针。
具体实现代码:

   q->next= p->next   ;  
    free(p);
    p=  q->next   ;

删除过程图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值