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

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

具体方法:

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

输入:

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->valval){

        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;

}

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jira集成开发代码_7种JIRA集成可优化您的Java开发流程

jira集成开发代码有哪些最佳集成可以用来优化JIRA工作流程&#xff1f; 我喜欢寻找在工作流程中提高效率的方法。 看着那些小小的自动化和流畅的流程&#xff0c;我的脸上露出了微笑。 我知道我并不孤单&#xff0c;有时花费更多的时间来获得一点点提升以使其正常工作&#xff…

c语言源程序结构是怎样的?

一个C语言源程序至少一个有main函数&#xff0c;定义函数必须指定 4 个元素&#xff1a;返回类型、函数名、圆括号内的形参表&#xff08;可能为空&#xff09;和函数体。源程序的结构特点&#xff1a;1、一个C语言源程序可以由一个或多个源文件组成。2、每个源文件可由一个或多…

c语言规定在一个源程序中main函数的位置是什么?

一个c程序有且仅有一个main函数&#xff0c;除main函数之外可以有若干个其它的函数&#xff0c;每个函数实现某一特定的操作。C语言规定&#xff0c;在一个源程序中&#xff0c;main函数的位置可以任意。因为&#xff1a;在一个C语言源程序中&#xff0c;程序总是从main函数开始…

jax-ws和jax-rs_使用JAX-RS和Jetty创建Web服务和Rest Server

jax-ws和jax-rs用Java创建WebService非常容易。 将其添加到ServletContainer并将其部署到嵌入式WebServer仅需要几行代码。 让我们创建一个具有两个函数的简单计算器&#xff0c;作为WebService的示例。 计算器将计算任意数量的squareRoot和平方。 它将返回一个简单的JSON响应…

可运行的c语言程序的扩展名为什么?

C语言源程序经过C语言编译程序编译之后&#xff0c;生成一个后缀为“.OBJ”的二进制文件(称为目标文件)&#xff0c;最后还要由称为“连接程序”(link)的软件&#xff0c;把此“.OBJ”文件与c语言提供的各种库函数连接在一起&#xff0c;生成一个后缀“.EXE”的可执行文件。显然…

activemq消息持久化_将ActiveMQ持久消息传递性能提高25倍

activemq消息持久化Apache ActiveMQ&#xff0c;JBoss A-MQ和Red Hat Apache ActiveMQ是一个非常受欢迎的开源消息传递代理&#xff0c;由创建&#xff08;和从事&#xff09; Apache Karaf &#xff0c; Apache Camel &#xff0c; Apache ServiceMix以及许多其他工具的人提供…

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

c语言实现两个有序链表的合并&#xff1a;现有两个有序单链表&#xff0c;通过代码实现将两个单链表合并为一个有序的新表&#xff0c;要求使用旧表的空间&#xff0c;不能新分配内存#include #include typedef struct List{ int a; struct List *next;}list;void newLis…

hibernate工厂模式_Hibernate锁定模式–乐观锁定模式如何工作

hibernate工厂模式显式乐观锁定 在上一篇文章中 &#xff0c;我介绍了Java持久性锁定的基本概念。 隐式锁定机制可防止丢失更新 &#xff0c;它适用于我们可以主动修改的实体。 尽管隐式乐观锁定是一种广泛使用的技术&#xff0c;但很少有人了解显式乐观锁定模式的内部工作原理…

using用法是什么?

using用法是&#xff1a;1、命名空间using namespace 命名空间;//这样每次使用命名空间中的变量时就不用指定命名空间了注意&#xff1a;头文件中不应有using命名空间的声明2、类型别名&#xff08;C 11&#xff09;using aa double;//等价于typedef double aatypedef double …

学习C ,常见的误解

学习C 你是否会有以下几点误解&#xff1f;1. “要理解C &#xff0c;你必须先学习C”2. “C 是一门面向对象的语言”3. “为了软件可靠性&#xff0c;你需要垃圾回收”4. “为了效率&#xff0c;你必须编写底层代码”5. “C 只适用于大型、复杂的程序”如果你中*了&#xff0c…

openshift使用_OpenShift DIY:使用Gradle构建Spring Boot / Undertow应用程序

openshift使用由于此错误&#xff0c; Gradle 1.6是在OpenShift上运行的最后一个受支持的Gradle版本。 但是从Gradle 2.2开始&#xff0c;这不再是问题&#xff0c;因此&#xff0c;使用自己动手做墨盒&#xff0c;在OpenShift上运行最新的Gradle不再是问题。 DIY盒带是一种实验…

php管理智能dns,负载均衡之DNS轮询

域名注册商都支持对统一主机添加多条A记录&#xff0c;这就是DNS轮询&#xff0c;DNS服务器将解析请求按照A记录的顺序&#xff0c;随机分配到不同的IP上&#xff0c;这样就完成了简单的负载均衡。下图的例子是&#xff1a;有3台联通服务器、3台电信服务器&#xff0c;要实现“…

php怎么把时间戳转成日期格式,php怎么把时间格式转换为时间戳?,时间戳转为日期...

php怎么把时间格式转换为时间戳&#xff1f;PHP怎么把时间格式转换成时间戳&#xff1f;&#xff0c;php时间格式转换为时间戳的方法&#xff1a;1。使用mktime()将时间转换为时间戳&#xff0c;语法为“mktime(小时、分钟、秒、月、日、年)”&#xff1b;2.使用strtime()将字符…

C语言的标识符由什么组成

C语言的标识符由字母、数字、下划线组成&#xff0c;并且第一个字符必须是字母或下划线&#xff0c;不能是数字。在标识符中&#xff0c;字母的大小写是有区别的&#xff0c;例如BOOK与book是两个不同的标识符。定义变量时&#xff0c;我们使用了诸如 a、abc、mn123 这样的名字…

jdk8读取文件_JDK 7和JDK 8中大行读取速度较慢的原因

jdk8读取文件我早些时候发布了博客文章Reading Large Lines Slower in JDK 7和JDK 8&#xff0c;并且在描述该问题的文章上有一些有用的评论 。 这篇文章提供了更多解释&#xff0c;说明为何该文章中演示的文件读取&#xff08;并由Ant的LineContainsRegExp使用 &#xff09;在…

C 11 实现的 100行 线程池

C 线程池一直都是各位程序员们造轮子的首选项目之一。今天&#xff0c;小编带大家一起来看看这个轻量的线程池&#xff0c;本线程池是header-only的&#xff0c;并且整个文件只有100行&#xff0c;其中C 的高级用法有很多&#xff0c;很值得我们学习&#xff0c;一起来看看吧。…

openshift使用_OpenShift v3:使用WildFly和MySQL的Java EE 7入门

openshift使用OpenShift是Red Hat的开源PaaS平台。 OpenShift v3 &#xff08;将于今年发布&#xff09;将提供使用Docker和Kubernetes运行微服务的整体体验。 以经典的Red Hat方式&#xff0c;所有工作都在OpenShift Origin的开源中完成。 这也将推动OpenShift Online和OpenSh…

c程序的基本组成单位是什么?

C程序是由函数构成的。函数是C程序的基本组成单位。一个C源程序中仅有一个main()函数,除main函数之外可以有若干个其它的函数。每个函数实现某一特定的操作。因此&#xff0c;函数是C程序的基本单位。一个函数由两部分组成&#xff1a;函数的说明部分。包括函数名、函数类型、函…

C语言头文件 “ 细节 ”

很多事不深入以为自己懂了&#xff0c;但真正用到项目上&#xff0c;才发现了问题。曾以为自己写C语言已经轻车熟路了&#xff0c;特别是对软件文件的工程管理上&#xff0c;因为心里对自己的代码编写风格还是有自信的。(毕竟刚毕业时老大对我最初的训练就是编码格式的规范化处…

oracle中悲观锁定_如何使用悲观锁定修复乐观锁定竞争条件

oracle中悲观锁定回顾 在我以前的文章中 &#xff0c;我解释了使用显式乐观锁定的好处。 然后我们发现&#xff0c;在很短的时间范围内&#xff0c;并发交易仍可以在我们当前交易被提交之前立即提交产品价格更改。 此问题可以描述如下&#xff1a; 爱丽丝拿产品 然后&#…