zoukankan      html  css  js  c++  java
  • C语言 百炼成钢23

    /*
    题目59:链表如下
    typedef struct _LinkList
    {
    int data;
    struct _LinkList*next;
    } LinkList;
    有如下结点数据域  1 2 3 4 5 6 7 8 12 19 。。。。
    要求1:创建链表
    要求2:删除结点值为偶数的结点 ;70分
    要求3:编写测试用例  30分
    */
    
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    typedef struct _linklist{
        int data;
        struct _linklist *pnext;
    }LinkList;
    
    //初始化链表头结点
    int InitLink(LinkList **pout/*out*/){
        int ERRO_MSG = 0;
        if (pout==NULL)
        {
            ERRO_MSG = 1;
            printf("pout==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList * phead = (LinkList *)malloc(sizeof(LinkList));
        if (phead==NULL)
        {
            ERRO_MSG = 2;
            printf("分配内存失败 erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        phead->data = 0;
        phead->pnext = NULL;
        *pout = phead;
        return ERRO_MSG;
    }
    
    //创建链表节点
    int CreateLink(LinkList *pin/*in*/,int data){
        int ERRO_MSG = 0;
        if (pin==NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList *pHead = pin;
        LinkList *pCurrent = pHead->pnext;
        //创建新节点
        LinkList *pMalloc = (LinkList *)malloc(sizeof(LinkList));
        pMalloc->data = data;
        pMalloc->pnext = NULL;
        if (pCurrent==NULL)
        {
            pHead->pnext = pMalloc;
            return ERRO_MSG;
        }
        //遍历到链表节点末尾位置
        while (pCurrent->pnext){
            pCurrent = pCurrent->pnext;
        }
        pCurrent->pnext = pMalloc;
        return ERRO_MSG;
    }
    
    //删除结点值为偶数的结点
    int DelLink(LinkList *pin/*in*/){
        int ERRO_MSG = 0;
        if (pin == NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList *pHead = pin;
        LinkList *pCurrent = pHead->pnext;
        LinkList * pPrior = pHead;
        while (pCurrent){
            if (pCurrent->data%2==0)
            {
                pPrior->pnext = pCurrent->pnext;
                //释放这个节点
                free(pCurrent);
                pCurrent = NULL;
                pCurrent = pPrior->pnext;
            }
            else{
                pPrior = pCurrent;
                pCurrent = pCurrent->pnext;
            }
        }
        return ERRO_MSG;
    }
    
    //打印链表
    void PrintfA(LinkList *pin/*in*/){
        if (pin==NULL)
        {
            printf("链表不可以为空!
    ");
        }
        LinkList *pHead = pin;
        LinkList *pCurrent = pHead->pnext;
        while (pCurrent){
            printf("%d
    ", pCurrent->data);
            pCurrent = pCurrent->pnext;
        }
    }
    
    //释放链表
    int FreeLink(LinkList **pin/*in*/){
        int ERRO_MSG = 0;
        if (pin==NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList *pHead = *pin;
        LinkList *pCurrent = pHead->pnext;
        LinkList *pPrior = pHead;
        while (pCurrent){
            pPrior->pnext = pCurrent->pnext;
            //释放内存
            if (pCurrent)
            {
                free(pCurrent);
                pCurrent = NULL;
            }
            pCurrent = pPrior->pnext;
        }
        if (pHead)
        {
            free(pHead);
            pHead = NULL;
        }
        return ERRO_MSG;
    }
    
    void main(){
        int i = 0,ret=0;
        //初始化链表头结点
        LinkList *pHead = NULL;
        //初始化头结点
        InitLink(&pHead);
        //创建节点
        for (i = 0; i < 9; i++)
        {
            ret=CreateLink(pHead, i + 1);
            if (ret!=0)
            {
                printf("创建链表节点报错!
    ");
                //释放所有链表节点
                goto END;
            }
        }
        //打印所有节点
        PrintfA(pHead);
        //删除部分节点
        ret=DelLink(pHead);
        if (ret!=0)
        {
            printf("删除偶数节点报错!
    ");
            //释放所有链表节点
            goto END;
        }
        //打印所有节点
        PrintfA(pHead);
    END:
        //释放所有节点
        FreeLink(&pHead);
        system("pause");
    }

  • 相关阅读:
    uva 10561 sg定理
    二进制下 求分数化小数的循环节问题
    zoj 2562 反素数
    uva 11916 解模方程a^x=b (mod n)
    Android 组件化方案探索与思考
    2018谷歌I/O开发者大会8大看点汇总 新品有哪些
    Glide高级详解—缓存与解码复用
    Android性能优化:手把手带你全面实现内存优化
    Android几种强大的下拉刷新库
    Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5597743.html
Copyright © 2011-2022 走看看