C语言每日一题(29)合并两个有序链表

news2024/11/27 2:28:31

力扣网 21合并两个有序链表

题目描述

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

示例

思路分析

最基本的一种思路就是,遍历两个链表,将对应结点的值进行比较,题目要求是要升序排序,即较小的值先排在前面,随后所在链表的较小结点先走,将后面的值于第二个链表的结点进行比较,即谁小谁先排,谁小谁先动,直到有一个指针遍历为空为止。

需要注意的是:

会存在比较存放完后,其中一个链表会有剩余,此时不需要再进行比较,直接进行存放即可。

完整代码

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    struct ListNode* newhead=(struct ListNode*)malloc(sizeof(struct ListNode));//哨兵位
    struct ListNode* cur1=list1,*cur2=list2;//避免头结点丢失,使用两个指针代替遍历
    struct ListNode* tail=newhead;//哨兵位结点同样如此
    while(cur1&&cur2)//任意一方为空停止
    {
        if(cur1->val>cur2->val)//1大于2的情况
        {
            tail->next=cur2;//哨兵位不存放有效值,从它的下一个结点开始存放。
            cur2=cur2->next;
            tail=tail->next;
        }
        else//1小于2的情况
        {
            tail->next=cur1;
            tail=tail->next;
            cur1=cur1->next;
        }
    }
    if(cur1==NULL)//判断是否存在任一链表有剩余的情况,直接存放即可
    {
        while(cur2)
        {
            tail->next=cur2;
            cur2=cur2->next;
            tail=tail->next;
        }
    }
    else
    {
        while(cur1)
        {
            tail->next=cur1;
            cur1=cur1->next;
            tail=tail->next;
        }
    }
    tail->next=NULL;//存放完后tail记得置空(否则为野指针)
    struct ListNode* ans=newhead->next;//动态申请的内存空间一定要释放,否则会造成内存泄漏
    free(newhead);
    return ans;

}

实现细节

这里避免使用头结点而采用一个不存放有效值的结点当作哨兵位,就不用考虑头结点为空的情况而是直接存放。

动态申请的内存空间不要忘记释放。

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

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

相关文章

错误:ERROR:torch.distributed.elastic.multiprocessing.api:failed

在多卡运行时,会出现错误(ERROR:torch.distributed.elastic.multiprocessing.api:failed),但是单卡运行并不会报错,通常在反向梯度传播时多卡梯度不同步。但我是在多卡处理数据进行tokenizer阶段报错,这竟然…

ZYNQ实验--Petalinux 安装

一、Petalinux 简介 PetaLinux是一个由Xilinx公司提供的嵌入式Linux开发工具套件,专门用于在Xilinx器件上构建、定制和部署嵌入式Linux系统。这个工具套件旨在简化嵌入式系统的开发过程,特别是针对使用Xilinx的可编程逻辑器件的系统。PetaLinux是Xilinx …

基于SpringBoot的教务管理系统

基于SpringBoot的教务管理系统 教务管理系统开发技术功能模块代码结构运行截图数据库源码获取 教务管理系统 欢迎访问此博客,是否为自己的毕业设计而担忧呢?是否感觉自己的时间不够做毕业设计呢?那你不妨看一下下面的文章! 开发…

基于单片机无人售货机仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、商品选择,购买数量选择,投币,液晶1602显示。 3、电机模拟出货。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void lcd_1602_init() //LCD1602初始…

实用干货丨Eolink Apikit 配置和告警规则的各种用法

API在运行过程中可能会遇到各种异常情况,如响应时间过长、调用频率过高、请求参数错误等,这些异常会对系统的稳定性和性能产生严重影响。因此,对API进行异常监控和告警是非常必要的。本文将介绍 Eolink Apikit 中使用的告警规则,帮…

UWA Pipeline 2.5.1 版本更新说明

UWA Pipeline是一款面向游戏开发团队的本地协作平台,旨在为游戏开发团队搭建专属的DevOps研发交付流水线,提供可视化的CICD操作界面、高可用的自动化测试以及UWA性能保障服务的无缝贴合等实用功能。 近期UWA Pipeline迎来2.5.1版本更新,进一…

【小黑送书—第六期】>>AI时代,程序员如何应对挑战——《AI时代系列书籍》

在AI时代,程序员面临着新的机遇和挑战。为了适应这个快速发展的时代,掌握新技能并采取相应的应对策略是至关重要的。 对于办公人员或程序员来说,利用AI可以提高工作效率。例如,使用AI助手可以帮助自动化日常的重复性工作&#xff…

软件测试方案该怎么做?

做某项工作之前都需要有个计划或方案,软件测试亦如此。软件测试方案就是描述测试目的、范围、方法和软件测试的重点等文档。对于验证软件产品的可接受程度编写测试计划文档是一种有用的方式,可以使测试工作和整个开发工作融合起来,让资源和变…

微信公众号会员系统怎么做

一、引言 在这个信息爆炸的时代,微信公众号已经成为了企业和个人品牌的重要宣传阵地。而在公众号运营过程中,会员系统是非常重要的一环。通过建立会员系统,你可以更好地管理粉丝、提升用户黏性,让你的品牌更加强大。本文将为你详…

Golang实现一个一维结构体,根据某个字段排序

package mainimport ("fmt""sort" )type Person struct {Name stringAge int }func main() {// 创建一个一维结构体切片people : []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},{"David", 35},{"Eve…

Redis缓存击穿、雪崩、穿透!(超详细)

作者前言: 为了解决Redis的缓存的问提也是在网上找了很多文章来了解,我感觉这篇文章非常好,希望大家了解一下,也是吧这篇文章归类了一下,可以直接在目录中找 缓存的击穿、穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题。 不过,…

用户的生命周期

用户生命周期是指用户在产品使用过程中的状态变化,一般分为5个阶段,分别为引入期、成长期、成熟期、沉默期和流失期。用户生命周期能够反映不同阶段用户的状态,可根据用户的不同状态进行针对性运营。运营中常说的拉新、促活、留存就是基于用户…

基于Java+Vue+uniapp微信小程序商品展示系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

每日汇评:积极的数据可能会推动澳元/美元的上涨

继 9 月份增加 6700 个就业岗位之后,澳大利亚 10 月份预计将增加 18000 个就业岗位; 失业率预计将从 3.6% 升至 3.7%,维持在历史低点附近; 澳元/美元在美元疲软的支撑下维持看涨基调, 其面临关键阻力位0.6520&#xff…

go语言学习之旅之安装sdk环境,hello world!

学无止境 为什么学习Go语言 高效编程: Go语言被设计为一门高效的编程语言。其编译速度快,执行速度也相对较快,适合用于构建高性能的应用程序。 并发支持: Go语言天生支持并发编程,通过goroutine和channel提供了简单而…

【C语言 | 数组】C语言数组详解(经典,超详细)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

Git学习(黑马程序员)

基本配置 在用户目录下创建文件.bashrc 1打开Git Bash 2 在目录下输入指令: touch ~/.bashrc在文件中写入内容: #用于输出git提交日志 alias git-loggit log --prettyoneline --all --graph --abbrev-commit #用于输出当前目录所有文件及基本信息 al…

3.4-初识Container

常用的docker container命令: 1、基于image创建docker container命令: docker run lvdapiaoliang/hello-docker 2、列举当前本地正在运行的container容器命令: docker container ls 3、列举当前本地所有的container容器命令(包括正在运行的和…

3DMAX建模基础教程:可渲染和封闭二维样条线

在3D建模中,可渲染和封闭的二维样条线对于创建复杂的模型和场景至关重要。以下是一些关于如何在3DMAX中建模基础教程,帮助你掌握可渲染和封闭的二维样条线的使用。 1. 创建新的样条线 首先,选择“图形”菜单,然后选择“样条线”…

如何利用PCB创建PCB封装库

如何利用PCB创建PCB封装库 首先你要活得PCB工程文件,然后利用Altium Designer将工程文件打开,如下图所示: 然后选择工具栏“设计”->“生成PCB库(P)”,如下图: 最后将生成的库文件保存到指…