码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-02-17 10:55:28      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:零基础   干什么   printf   个人   语言   ora   proc   别人   时间   

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

??以下是一个有序链表合并的代码,一刻钟内盲写,花了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.csdn.net/jiangjunshow

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

标签:零基础   干什么   printf   个人   语言   ora   proc   别人   时间   

原文地址:https://www.cnblogs.com/ksiwnhiwhs/p/10390261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!