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 \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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值