C/C++删除单向链表全部匹配节点

面试时候出现过,想了好久-_-,好吧,补上。

链表:

typedef   char  DataType; 

typedef struct Node  //Node为结点类型名
{
    DataType    data;   //data代表数据元素
    struct Node *next; //next为指向下一结点的指针
}Node; 



int ListDelete_All (Node *H, DataType item)
{   
    Node *p=H;
    Node *t;  //保存匹配的节点 
    int i=0;    //保存删除节点的数量 
    while(p->next)   
    { 
        if(p->next->data==item) //如果匹配 
        {
            t=p->next;      //①t为被删除结点
            p->next=t->next; //②删除t的链接关系
            free(t);    //③释放被删结点c++用delete;    
            i++;            //④记录删结数目        
        }
        else
            p=p->next;      //如果没匹配才指向下一个 
    }
    return i;
}

函数功能:删除单向链表所有匹配的节点
参数:H为链表头、item为匹配的元素
返回:删除的节点数

    TraverseList(head);//遍历
    printf("%d\n",ListDelete(head,'c'));
    TraverseList(head);

这里写图片描述


删除第一个节点简单一点。

int ListDelete_First (Node *H, DataType item)
{   
    Node *p=H;
    Node *t;  //保存匹配的节点  
    while( p->next )
    {
        if(p->next->data==item)
            {
                t=p->next;      //①t为被删除结点
                p->next=t->next; //②删除t的链接关系
                 free(t);          //③释放被删结点
                return 1;         //成功返回1
            }
        p=p->next;  
    }
    return 0;       
}

其他功能就不附上了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值