• C语言基础


    回归C基础
    实现一个单向链表,并有逆序功能 (大学数据结构经常是这么入门的)

    //定义单链表结构体
    typedef struct Node{
        int value;
        struct Node *next;
    }Node;
    
    //创建链表
    Node* createNode(int value,Node *next){
        Node *node = malloc(sizeof(Node));
        node->value = value;
        node->next = next;
        return node;
    }
    
    //打印链表
    void printList(Node *list){
        for (Node *node = list; node != NULL; node = node->next) {
            printf("current node value %d 
    ",node->value);
        }
        
    }
    
    //反转链表
    Node* reverse(Node *listNode){
        Node *reList = NULL;
        Node *tmp;
        while (listNode != NULL) {
            tmp = malloc(sizeof(Node));
            //逆转之后,原链表的头结点就是新链表的尾结点
            //如果不是第一个结点,则本次产生的新结点是上次结点的前一个
            if (reList == NULL) {
                tmp->next = NULL;
            }else{
                tmp->next = reList;
            }
            tmp->value = listNode->value;
            reList = tmp;
            listNode = listNode->next;
        }
        //原链表的最后一个结点是新链表的头结点
        return reList;
    }
    
    //销毁
    void destroyList(Node *list){
        Node *tmp;
    
        while (list != NULL) {
            tmp = list;
            list = list->next;
            free(tmp);
        }
        printf("链表销毁
    ");
    }
    

    测试打印结果

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            Node *first = createNode(0, NULL);
            Node *list = first;
            
            first->next = createNode(2, NULL);
            first = first->next;
            
            first->next = createNode(3, NULL);
            first = first->next;
            
            first->next = createNode(4, NULL);
            first = first->next;
            
            first->next = createNode(7, NULL);
            first = first->next;
            
            printf("源数据:
    ");
            printList(list);
    
            printf("反转后数据:
    ");
            list = reverse(list);
            printList(list);
            
            destroyList(list);
    
        }
        return 0;
    }
    

    结果:

    c-lianbiao.png

  • 相关阅读:
    流程控制
    数据类型和运算符
    抽奖
    蓝桥杯 第五届
    python下编译py成pyc和pyo
    Django中提示TemplateDoesNotExist?
    Ubuntu16.04 apache2 wsgi 部署django
    Ubuntu 14.04下Django+MySQL安装部署全过程
    LVM原理及PV、VG、LV、PE、LE关系图
    SQLServer2008-镜像数据库实施手册(双机)SQL-Server2014同样适用
  • 原文地址:https://www.cnblogs.com/gongxiaokai/p/7123805.html
Copyright © 2020-2023  润新知