C语言怎么合并两个有序链表


当前第2页 返回上一页

代码实现:

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

92

93

94

95

96

97

98

99

100

101

102

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     struct ListNode *next;

 * };

 */

 

 

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){

    if(l1==NULL){

        return l2;

    }

    if(l2==NULL){

        return l1;

    }

    struct ListNode *l = (struct ListNode*)malloc(sizeof(struct ListNode));

    l->next = NULL;

    struct ListNode *list1 = l1;

    struct ListNode *list2 = l2;

    if(l1->val<l2->val){

        l->val=l1->val;

        if(list1->next==NULL){

            l->next=list2;

            return l;

        }

        list1=list1->next;

    }else{

        l->val=l2->val;

        if(list2->next==NULL){

            l->next=list1;

            return l;

        }

        list2=list2->next;

    }

    struct ListNode *list = l;

    while(list1->next!=NULL&&list2->next!=NULL){

        if(list1->val<=list2->val){

            struct ListNode *body = (struct ListNode *)malloc(sizeof(struct ListNode));

            body->val = list1->val;

            body->next = NULL;

            list->next = body;

            list = list->next;

            list1 = list1->next;

        }else{

            struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));

            body->val=list2->val;

            body->next=NULL;

            list->next=body;

            list=list->next;

            list2=list2->next;

        }

    }

    if(list1->next==NULL){

        while(list2->next!=NULL){

            if(list1->val<=list2->val){

                list->next = list1;

                list = list->next;

                list->next=list2;

                return l;

            }else{

                struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));

                body->val=list2->val;

                body->next=NULL;

                list->next=body;

                list=list->next;

                list2=list2->next;

            }

        }

    }else{

        while(list1->next!=NULL){

            if(list2->val<=list1->val){

                list->next=list2;

                list=list->next;

                list->next=list1;

                return l;

            }else{

                struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));

                body->val=list1->val;

                body->next=NULL;

                list->next=body;

                list=list->next;

                list1=list1->next;

            }

        }

    }

    if(list1->next==NULL&&list2->next==NULL){

        if(list1->val<=list2->val){

            list->next = list1;

            list=list->next;

            list->next=list2;

        }else{

            list->next=list2;

            list=list->next;

            list->next=list1;

        }

    }

 

 

 

    return l;

}

图文教程分享:java入门

以上就是C语言怎么合并两个有序链表的详细内容!

返回前面的内容

相关阅读 >>

php与C语言有什么联系和区别?

复数型是C语言的数据类型吗?

C语言if语句格式是什么?

C语言允许函数的递归调用吗

C语言中strstr函数的用法是什么?

带你了解C语言中的sleep函数(附代码)

C语言中,一条简单语句的结束符为什么?

C语言文件读写函数有哪些?

C语言中的“且”用什么符号表示?

C语言fopen函数的用法

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



打赏

取消

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

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

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

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

评论

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