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

写在前面 弄了下个人站...防止内容再次被锁定...所有东西都在这里面 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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Star先生的专栏

利用文本挖掘技术来找出《天龙八部》中的“小鲜词”

写这篇文章就是让你简单的自动的从文本中找出新的词,这样就知道现在的年轻人喜欢什么了。对于博主这种上了年纪的人来说,真的是很有用,呜呜。

3780
来自专栏Java爬坑系列

【Java入门提高篇】Day33 Java容器类详解(十五)PriorityQueue详解

 今天要介绍的是基础容器类(为了与并发容器类区分开来而命名的名字)中的另一个成员——PriorityQueue,它的大名叫做优先级队列,想必即使没有用过也该有所...

1261
来自专栏wannshan(javaer,RPC)

dubbo序列化过程源码分析

先看下dubbo在serialize层的类设计方案 序列化方案的入口,是接口Serialization的实现类。 /** * Serialization. ...

8649
来自专栏数据之美

Hadoop MapReduce 二次排序原理及其应用

关于二次排序主要涉及到这么几个东西: 在0.20.0 以前使用的是 setPartitionerClass setOutputkeyCompara...

3308
来自专栏三丰SanFeng

算法学堂 - 二分查找及其变形

C语言中可以用bsearch()实现二分查找。同qsort()一样,bsearch()也包含在glibc库中,且同样要自定义比较函数。其原型如下: void *...

2266
来自专栏Albert陈凯

2018-04-26 Java – Read File to String Examples三种方法把文件读成一个字符串

原文地址:(英文版) https://howtodoinjava.com/core-java/io/java-read-file-to-string-exam...

3986
来自专栏Ryan Miao

lombok使用基础教程

前言 lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。在很多工具类的项目中都有这个功能。比如dagger。 通俗的说,lombok可以通过...

69714
来自专栏一个会写诗的程序员的博客

MySql 计算两个日期的时间差函数

返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的 单位由interval 参数给出。inte...

661
来自专栏软件开发 -- 分享 互助 成长

C++ STL之排序算法

排序算法和查找算法差不多,也涉及到迭代器区间问题,关于该问题的注意事项就不在啰嗦了 一、全部排序sort、stable_sort sort是一种不稳定排序,使用...

2025
来自专栏Fish

UVA-12096 The SetStack Computer

白书的例题,而且提示十分重要,所以就做了一下。 先说题意 维护 N(1≤N≤2000) 个操作, 可能的五种操作如下: PUSH: 在栈顶加入一个空集合 A=...

2207

扫码关注云+社区

领取腾讯云代金券