2022.07.20 练习

本文介绍了链表操作的四个关键功能:按位置更新节点值、删除尾节点、按值搜索并更新以及链表反转。通过实例展示了如何在链表中实现这些操作,并提供了相应的错误处理机制。

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

1>按位置修改函数

                 
//                                       
Linklist *find_node(Linklist *L,int pos) 
{                                        
    if(NULL == L || pos<0 || pos>L->len) 
    {                                    
        printf("查找失败\n");            
        return NULL;                     
    }                                    
                                         
    Linklist *q = L;                     
    for(int i= 1; i<=pos;i++)            
    {                                    
        q= q->next;                      
    }                                    
    return q;                            
}                                        

//
                                                        
int list_update_pos(Linklist *L,int pos,datatype e)     
{                                                       
    if(NULL == L|| list_empty(L) ||pos<1||pos>L->len)   
    {                                                   
        printf("修改失败\n");                           
        return -1;                                      
    }                                                   
    Linklist *q=find_node(L,pos-1);                     
    Linklist *p=q->next;                                
    p->data =e;                                         
    printf("修改成功\n");                               
}                           

2>尾删函数

int list_delete_tail(Linklist *L)             
{                                             
    if(NULL == L || list_empty(L))            
    {                                         
        printf("删除失败\n");                 
        return -1;                            
    }                                         
                                              
    Linklist *q =L;                           
    while(q->next->next != NULL)              
    {                                         
        q=q->next;                            
    }                                         
    q->next = NULL;                           
                                              
    L->len--;                                 
    printf("删除成功\n");                     
}                                             

3>按值修改函数

                     
//
int list_search_value(Linklist *L,datatype e)      
{                                                  
    if(NULL ==L||list_empty(L))                    
    {                                              
        printf("查找失败\n");                      
        return -1;                                 
    }                                              
    Linklist *q =L->next;                          
    for(int i=1;i<=L->len;i++)                     
    {                                              
        if(q->data == e)                           
        {                                          
            return i;                              
        }                                          
        q=q->next;                                 
    }                                              
                                                   
    return 0;                                      
}                                                  

//
int list_update_pos(Linklist *L,int pos,datatype e)   
{                                                     
    if(NULL == L|| list_empty(L) ||pos<1||pos>L->len) 
    {                                                 
        printf("修改失败\n");                         
        return -1;                                    
    }                                                 
    Linklist *q=find_node(L,pos-1);                   
    Linklist *p=q->next;                              
    p->data =e;                                       
    printf("修改成功\n");                             
}                                                     


//
int list_update_value(Linklist *L,datatype olde,datatype newe)
{                                                             
    if(NULL == L|| list_empty(L))                             
    {                                                         
        printf("修改失败\n");                                 
        return -1;                                            
    }                                                         
                                                              
    int n =list_search_value(L,olde);                         
    list_update_pos(L,n,newe);                                
    printf("修改成功\n");                                     
                                                              
}                                                             
                                                              

4>链表反转函数

void list_reverse(Linklist *L)              
{                                           
    if(NULL == L || L->len <=1)             
    {                                       
        printf("反转失败\n");               
        return ;                            
    }                                       
                                            
    Linklist *r=L->next;                    
    L->next = NULL;                         
                                            
    Linklist *q=NULL;                       
                                            
    while(r!=NULL)                          
    {                                       
        q=r;                                
        r=r->next;                          
                                            
        q ->next = L->next;                 
        L->next =q;                         
                                            
    }                                       
    printf("反转成功\n");                   
                                            
}                                           
                                            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值