c语言实现两个有序链表的合并(代码示例)


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

教程推荐:《c语言教程视频》

c语言实现两个有序链表的合并

现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存

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

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

#include <stdio.h>#include <stdlib.h>typedef struct List{

    int a;

    struct List *next;}list;void newList(list *l){

    //初始化头节点

    l->next = NULL;}void setList(list * l){

    //建立链表

    int i = 1;

    int j;

    while (i)

    {

        scanf_s("%d", &j);

        if (j == -1)

        {

            i = 0;

        }

        else

        {

            list *l1 = (list *)malloc(sizeof(list));//为新的结点分派内存

            l1->a = j;//储存数据

            /*

            将最后结点的next区域指向新结点

            将新结点的next区域指向设置为空

            */

            l->next = l1;

            l1->next = NULL;

            l = l->next;

        }

    }}void printfList(list *l){

    printf("该链表内容为:\n");

    while (l->next)

    {

        printf("%d\t", l->next->a);

        l = l->next;

    }

    printf("\n");}list *add(list *LA, list *LB){

    //记录两个链表的头结点

    list *la=LA;

    list *l = LA;

    list *lb = LB;

    //移动指针

    LA = LA->next;

    LB = LB->next;

    la->next = NULL;

    while (LA!=NULL&&LB!=NULL)

    {

        /*

        将两个结点的数据进行比较,数据较小的结点接在头结点后面,

        */

        if (LA->a < LB->a)

        {

            la->next = LA;

            la = LA;

            LA = LA->next;

        }

        else

        {

            la->next = LB;

            la = LB;

            LB = LB->next;

        }

    }

    //若其中一个链表的结点已经全接在新表中则将另一个链表的剩余结点接在新表的后面

    if (LA)

    {

        la->next = LA;

    }

    if(LB)

    {

        la->next = LB;

    }

    free(lb);

    return l;}int main(){

    //为结点分配内存

    list *LA = (list *)malloc(sizeof(list));

    list *LB = (list *)malloc(sizeof(list));

    //初始化结点

    newList(LA);

    newList(LB);

    //建立链表

    setList(LA);

    setList(LB);

    //输出链表的内容

    printf("LA的数据:\n");

    printfList(LA);

    printf("LB的数据:\n");

    printfList(LB);

    list *LC = add(LA, LB);

    //输出合并后的新表

    printfList(LC);

    system("pause");

    return 0;}

在这里插入图片描述

更多编程相关知识,请访问:编程入门!!

以上就是c语言实现两个有序链表的合并(代码示例)的详细内容!

相关阅读 >>

C语言fun函数有什么例题?

C语言中用于结构化程序设计的三种基本结构是什么

C语言中在main函数中定义的变量是全局变量么

学好C语言可以干什么?

C语言打印菱形

C语言常量的正确表示方法有哪些

C语言换行符号是什么?

一个c源程序必须包含一个main函数吗

vs2017怎么编写C语言

适合小白入门C语言的简单教程

更多相关阅读请进入《C语言》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...