C语言合并两个有序链表的方法:拼接指定的两个有序链表的所有节点即可。例如两个有序链表分别为【1->2->4】和【1->3->4】,合并后的有序链表为【1->1->2->3->4->4】。

具体方法:

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

(视频教程推荐:java课程)

输入:

1->2->4, 1->3->4

输出:

1->1->2->3->4->4

分析:两个链表为有序链表,所以依次遍历两个链表比较大小即可。

代码实现:

/** * 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入门

更多相关文章

  1. 两个Golang超大文件读取的方案
  2. go语言如何删除链表节点
  3. go-carbon1.2.5版本发布,新增两个互转方法!
  4. java对XML文件的解析、节点的增加、删除操作总结
  5. XML(4)XDocument和XmlDocument搜索指定的节点
  6. xml学习(7) .net 获取xml节点或者属性最大值
  7. FireFox对XML的处理兼容IE的节点处理方法
  8. 读写xml所有节点个人小结 和 读取xml节点的数据总结
  9. 介绍数据库生成xml的两个简单示例代码

随机推荐

  1. 动画:扫盲 Git 版本控制(下)
  2. 这次鹿哥的福利不会让你们失望!
  3. 谈一谈我扎心的求学经历!
  4. GitHub的注册,代码仓库的创建,用小乌龟上传
  5. 老前辈和我讲述了前后端十几年的发展历程
  6. 动画:浅谈后台 MVC 模型与 MVVM 双向绑定
  7. 动画:扫盲 Git 版本控制
  8. 吭哧吭哧写了两年,所有文章分类汇总!
  9. 面试官:MySQL怎么查看表占用空间大小
  10. 你是如何变的自律的?