zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    最新Sublime Text 2 激活 汉化
    深入理解JPEG图像格式Jphide隐写
    入CTF坑必不可少的地方-保持更新
    v0lt CTF安全工具包
    浅析弱口令
    尽最大可能分析上传源码及漏洞利用方式
    最新Internet Download Manager (IDMan) 6.25 Build 20 32位 64位注册破解补丁
    c# double保留2位小数
    VS2010 & Visual Assist X 的配合
    C#的回调被C++调用
  • 原文地址:https://www.cnblogs.com/gongxiaokai/p/7123805.html
Copyright © 2011-2022 走看看