有序链表合并C语言递归版--我稍微会一点编程

本文分享了一个简单的有序链表合并代码实现,旨在教授儿童基础编程概念。作者通过假期编程实践,展示了如何将两个有序链表合并成一个,并强调了代码的简洁性和易于理解性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                       

假期最后一天,闲着没事编个程,天天吆喝自己不会编程,其实还是稍微会一点的。

  以下是一个有序链表合并的代码,一刻钟内盲写,花了10分钟左右调试通过,通篇只有一个if语句作为递归退出条件!

#include <stdio.h>#include <stdlib.h>int a[] = {1,3,5,7,8,10,11,12,15,19,21,22,24,25,26};int b[] = {2,4,5,6,9,16,17,18,27,30,31};struct list {        struct list *next;        int v;};void merge(struct list *iter, struct list *base){        struct list *last = iter;        if (!iter) {                return;        }        iter = iter->next;        while (iter && (!base || iter->v < base->v)) {                last = iter;                iter = iter->next;        }        last->next = base;        merge(base, iter);}int main(int argc, char **argv){        int i = 0, j = 0;        struct list *al = (struct list*)calloc(15, sizeof(*al));        struct list *bl = (struct list*)calloc(11, sizeof(*bl));        struct list *itera;        struct list *iterb;        // create 2 lists        {                for (i = 0; i < 15; i++) {                        itera = &al[i];                        itera->v = a[i];                        itera->next = &al[i+1];                }                itera->next = NULL;                for (i = 0; i < 11; i++) {                        iterb = &bl[i];                        iterb->v = b[i];                        iterb->next = &bl[i+1];                }                iterb->next = NULL;        }        // merge 2 lists        {                merge(al, bl);        }        // print the result        {                for (; al; al=al->next) {                        printf("%d \n", al->v);                }        }}
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

本来想为这种行为找点意义,因为这实在是太简单了(简单并不意味着每个人都能写对,我就总是搞不定边界判断),我有时间不去搞TCP不去搞SDWAN,弄这干什么?

  主要是假期的旅行泡汤了,本来是想外出的,然而没有成行,就在家里待了三天。

  啊哈,可以教小小啊!可以教小小怎么把两个有序的链表合并成一个。当我做完这个程序后,搜了一下网上别人写的方案,发现还是我的最简单了,我也不考虑什么时间复杂度了,总之能让一个六岁的智商平平的小孩子用最短时间理解这段代码才是根本目的,于是也就不炫技了。

  竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生!然而,何来烟雨?何谓平生?

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值