美文网首页ios学习之路程序员
C语言基础 - 实现单向链表

C语言基础 - 实现单向链表

作者: gwk_iOS | 来源:发表于2016-12-15 00:45 被阅读158次

    写在前面
    弄了下个人站...防止内容再次被锁定...所有东西都在这里面
    welcome~
    个人博客

    回归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 \n",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("链表销毁\n");
    }
    

    测试打印结果

    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("源数据:\n");
            printList(list);
    
            printf("反转后数据:\n");
            list = reverse(list);
            printList(list);
            
            destroyList(list);
    
        }
        return 0;
    }
    

    结果:

    c-lianbiao.png

    相关文章

      网友评论

      本文标题:C语言基础 - 实现单向链表

      本文链接:https://www.haomeiwen.com/subject/vuuwmttx.html