leetCode-21 合并两个有序链表(C语言描述)_合并两个有序链表 leetcode c语言_jacklove2run的博客-程序员宅基地

技术标签: 算法  

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

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists

两种思路,递归解法和非递归解法

递归解法:

1. 分为两个子问题:

list1[0]+merge(list1[1:],list2)    list1[0]<list2[0]
list2[0]+merge(list1,list2[1:])    otherwise

来源:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode

即两个链表头部较小的一个与剩下元素的 merge 操作结果合并。

代码如下:

/**
 * 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;
    }
    if(l1->val < l2->val) {
        l1->next = mergeTwoLists(l1->next, l2);
        return l1;
    } else {
        l2->next = mergeTwoLists(l1, l2->next);
        return l2;
    }
}

非递归解法:

我们尝试把l2的元素插入到l1当中,我们用一个指针prev指向当前插入后位置的头部,在这个位置之前的节点都是有序的。比较l1和l2当前节点的大小,对于较小的节点,用prev指针指向它,并prev往下移动一个节点,且l1或l2往下移动,直到l1或l2当中有一个已经遍历完毕。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
    struct ListNode *prehead = malloc(sizeof(struct ListNode)), *prev = prehead;
    while(l1 != NULL && l2 != NULL) {
        if(l1->val <= l2->val) {
            prev->next = l1;
            l1 = l1->next;
        } else {
            prev->next = l2;
            l2 = l2->next;
        }
        prev = prev->next;
    }
    prev->next = (l1 == NULL) ? l2 : l1;
    return prehead->next;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012135155/article/details/103855201

智能推荐

javadoc生成出现错误“编码 GBK 的不可映射字符-程序员宅基地

在使用Eclipse进行javadoc的导出时,提示“编码 GBK 的不可映射字符”,应该就是中文注释Eclipse不认,需要在调用javadoc.exe的时候传递编码集告诉它采用什么编码去生成javadoc文档。打开eclipse,project –> Export –> javadoc 一项一项的选你要输出javadoc的项目,最后一步中VM设置行中加入以下代码 -en

Python猫眼电影数据采集与可视化分析实战_python+sqlite爬取猫眼电影并进行可视化数据分析-程序员宅基地

在国内比较知名的电影数据平台应该就是豆瓣、猫眼了,别的使用的不是很多,这两个平台就我们来说,平时的实践依赖还是比较多的,今天主要是想基于猫眼电影数据做一点分析性的工作,在我之前的文章中,基于豆瓣影评数据的采集、处理、存储、分析、可视化整个流程已经做了详细的介绍与实现了,感兴趣的话可以去参考一下我之前的文章 ,地址在下面:https://yishuihancheng.blog.cs..._python+sqlite爬取猫眼电影并进行可视化数据分析

一文让你深度了解Linux内核架构和工作原理-程序员宅基地

作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。virt/ ---- 提供虚拟机技术的支持。

oracle不一致性关闭下次,Oracle DBA课程系列笔记(3)-程序员宅基地

第三章: 实例管理1、instance 功能:用于管理和访问database。2、init parameter files :管理实例相关启动参数 。位置:$ORACLE_HOME/dbs3、pfile :静态参数文件。1、文本文件,可以通过编辑器进行修改参数。 2、修改参数必须关闭实例,下次重启实例才生效。4、spfile :动态参数文件。 1、二进制文件,不可以通过编辑器修改。 2、参数可以..._oracle不一致性关闭

7-2 I Love GPLT (5 分)-程序员宅基地

#include <stdio.h>int main(){ printf("I\n \nL\no\nv\ne\n \nG\nP\nL\nT\n"); return 0;}这道超级简单的题目没有任何输入。你只需要把这句很重要的话 ——I Love GPLT——竖着输出就可以了。所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。...

grpc命令行工具grpcurl使用_server does not support the reflection api-程序员宅基地

安装go get github.com/fullstorydev/grpcurlgo install github.com/fullstorydev/grpcurl/cmd/grpcurl注册reflection服务grpcurl对于其他grpc服务的感知皆来自reflection服务,所以在注册自己的服务之前需要先注册reflection服务,否则会提示$ grpcurl -pla..._server does not support the reflection api

随便推点

MatLab实现均值滤波器_matlab conv2用于均值滤波-程序员宅基地

% 3*3 均值滤波kernel_size = [3,3];kernel = ones(kernel_size)/(kernel_size(1)*kernel_size(2));padding_size = (kernel_size-1)/2;img_height = size(I2,1);img_width = size(I2,2);img_channels = size(I2,3);..._matlab conv2用于均值滤波

Spring学习记录01_@around(value = pointcut_goods_update) public obje-程序员宅基地

JavaEE概述第一阶段:Java2.0 版本提出Java划分为3大平台;JavaSE:标准版 (桌面应用:eclipse ,Navicat,IDEA)JavaME:微型版 (移动端应用)JavaEE:企业版 (开发大型企业应用)大型企业应用需求1、高并发(能够支持大量的用户同时在线 几万-几百万);2、大数据量(单表的数据可能都达到 几千万);3、支持分布式事务;4、支持集群,支持负载均衡;注意:单台的tomcat 在单位时间1s内,能支持0-500个并发请求;需要的技术轻量级框架_@around(value = pointcut_goods_update) public object cachegoodsupdate(procee

数据结构与算法分析(java语言描述)之第一章_算法设计与分析java语言描述算法第一关-程序员宅基地

一个coder是绕不过数据结构和算法的,于是买了本书,翻了下一共12章,blog就当印象笔记了_算法设计与分析java语言描述算法第一关

python基础 -04- 数据类型(int,float,str,bool)_float int python-程序员宅基地

数字(int,float)int(整型) 在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807long(长整型) 跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。 注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不_float int python

使用shiro框架完成认证、授权、加密、缓存、记住我和session会话周期管理-程序员宅基地

使用shiro框架完成认证、授权、加密、缓存、记住我和session会话周期管理Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架,使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。使用shiro框架用户访问资源控制流程分析:shiro框架的详细架...

SQL Server附加数据库报错无法打开物理文件,操作系统错误5的图文解决教程_sql无法打开物理文件-程序员宅基地

附加数据时,提示无法打开物理文件,操作系统错误5。如下图:问题原因:可能是文件访问权限方面的问题。解决方案:找到数据库的mdf和ldf文件,赋予权限即可。如下图:找到mdf和ldf文件,本演示以ldf为例。 1.点击文件右键属性-->安全-->编辑2.编辑-->添加3.添加-->高级4.高级-->立即查找-->搜索结果中找到-->Everyone-->确定-->确定5.确定-->默认选中的E..._sql无法打开物理文件

推荐文章

热门文章

相关标签