【力扣刷题实战】合并两个有序链表

大家好,我是小卡皮巴拉 

文章目录

目录

力扣题目:合并两个有序链表

题目描述

示例 1:

示例 2:

示例 3:

解题思路

问题理解

算法选择

具体思路

解题要点

 完整代码(C语言)

兄弟们共勉 !!!


每篇前言

博客主页:小卡皮巴拉

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。 

力扣题目:合并两个有序链表

原题链接:合并两个有序链表

题目描述

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

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

解题思路

问题理解

给定两个升序排列的单链表list1list2,要求合并为一个新的升序链表并返回。

算法选择

使用双指针遍历法,通过比较两个链表的当前节点值,依次选择较小的节点构建新的链表。

具体思路

  1. 初始检查

    • 首先,检查list1list2是否为空。如果其中一个为空,直接返回另一个链表,因为空链表与任何链表合并的结果就是非空的那个链表本身。

  2. 初始化指针

    • 使用l1l2分别指向list1list2的头节点。

    • 创建一个哨兵节点(占位节点)newHead,并同时让它作为新链表的尾节点newTail。这里哨兵节点的作用是简化链表为空时的处理,但会引入额外的内存分配和释放。

  3. 合并过程

    • 使用一个while循环,只要l1l2都不为空,就继续执行循环。

    • 在循环内部,比较l1l2当前节点的值:

      • 如果l1->val小于l2->val,则将l1当前节点接到newTail后面,并更新newTaill1指针。

      • 否则,将l2当前节点接到newTail后面,并更新newTaill2指针。

  4. 处理剩余节点

    • while循环结束时,l1l2中至少有一个为空。此时,将非空的链表直接接到newTail后面。

  5. 返回结果

    • 由于我们使用了哨兵节点,所以合并后的链表头节点是newHead->next

    • 释放哨兵节点newHead占用的内存,并返回合并后的链表头节点。

解题要点

  1. 边界处理:若任一链表为空,直接返回非空链表。
  2. 双指针遍历:使用双指针分别遍历两个链表,比较节点值。
  3. 选择接入:将较小值的节点接入新链表,并更新指针。
  4. 结果返回:返回新链表头(注意哨兵节点的处理与内存释放)。

 完整代码(C语言)

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 
{// 对空链表进行处理if (list1 == NULL) {return list2;}if (list2 == NULL) {return list1;}ListNode* l1 = list1;ListNode* l2 = list2;// 创建新链表的头结点和尾结点ListNode *newHead, *newTail;//由于空链表情况特殊,需特殊处理,我们采用申请哨兵位(占位结点)的方式来简化代码//这样后续的代码无需再判断链表是否为空// 创建非空链表newHead = newTail = (ListNode*)malloc(sizeof(ListNode));while (l1 && l2) {if (l1->val < l2->val) {// l1插入新链表中newTail->next = l1;newTail = newTail->next;l1 = l1->next;} else {// l2插入新链表中newTail->next = l2;newTail = newTail->next;l2 = l2->next;}}// 跳出循环,只有两种情况:1. l1走到空 2. l2走到空if (l1) {newTail->next = l1;}if (l2) {newTail->next = l2;}//将哨兵位(占位结点)归还给操作系统ListNode* retHead = newHead->next;free(newHead);newHead = NULL;return retHead;
}

兄弟们共勉 !!!

码字不易,求个三连

抱拳了兄弟们!

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

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

相关文章

Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)

0x01 产品介绍&#xff1a; Palo Alto Networks Expedition 是一款强大的工具&#xff0c;帮助用户有效地迁移和优化网络安全策略&#xff0c;提升安全管理的效率和效果。它的自动化功能、策略分析和可视化报告使其在网络安全领域中成为一个重要的解决方案。 0x02 漏洞描述&am…

图像处理(二)——MDPI特刊推荐

特刊征稿 01 期刊名称&#xff1a; Computer Vision and Image Processing, 2nd Edition 截止时间&#xff1a; 投稿截止日期&#xff1a;2024年12月31日 目标及范围&#xff1a; 感兴趣的主题包括但不限于&#xff1a; 用于图像分类和识别的深度学习 对象检测和跟…

Chromium HTML5 <svg>对应c++接口说明

一、SVG&#xff1a;可缩放矢量图形 开始学习 SVG 可缩放矢量图形&#xff08;Scalable Vector Graphics&#xff0c;SVG&#xff09;基于 XML 标记语言&#xff0c;用于描述二维的矢量图形。 作为一个基于文本的开放网络标准&#xff0c;SVG 能够优雅而简洁地渲染不同大小的…

c高级10月15日

1&#xff0c;思维导图

鸿蒙版微信正式上架,国产化软件抱团进化多样化生态圈

微信鸿蒙版已经在2024年10月12日正式上架鸿蒙应用市场&#xff0c;并且开始公测。根据报道&#xff0c;上架后鸿蒙版微信的公测名额在很短的时间内就被抢光&#xff0c;显示出用户对于这款应用的极大热情。腾讯高管张军宣布&#xff0c;自10月12日起&#xff0c;每晚在鸿蒙应用…

3D Slicer 教程三 ---- 坐标系

上篇提到3D Slicer 教程二 ---- 数据集-CSDN博客 3d slicer的坐标系与大多数医学影像软件使用LPS&#xff08;左、后、上&#xff09;坐标系统不太一样, 今天就仔细介绍一下坐标系的区别,复盘一下在影像处理中遇到的坐标问题(集中在坐标处理相关的,图像插值,图像处理, 定位线,翻…

薪资管理系统原型PC端+移动端 Axure原型 交互设计 Axure实战项目

薪资管理系统原型PC端移动端 Salary Management System Prototype 薪资管理系统原型图是一种以图形化方式展示系统界面和功能交互的设计图形。该原型图旨在呈现薪资管理系统的整体架构、界面布局和用户交互流程&#xff0c;为开发团队和利益相关者提供一个清晰而具体的概念。…

安全生产玩手机检测系统 玩手机识别系统 玩手机监测预警系统 使用 Python 和 OpenCV 库实现

在生产作业过程中&#xff0c;员工玩手机是一种极其危险的行为。它会分散员工的注意力&#xff0c;使其无法专注于工作任务。生产现场往往存在各种潜在的危险因素&#xff0c;如机械设备的运转、高空作业、化学品的使用等&#xff0c;一旦员工分心&#xff0c;就很容易忽视这些…

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…

AI LLM 利器 Ollama 架构和对话处理流程解析

Ollama 概述 Ollama 是一个快速运行 LLM&#xff08;Large Language Models&#xff0c;大语言模型&#xff09;的简便工具。通过 Ollama&#xff0c;用户无需复杂的环境配置&#xff0c;即可轻松与大语言模型对话互动。 本文将解析 Ollama 的整体架构&#xff0c;并详细讲解…

FFmpeg的简单使用【Windows】

目录 一、视频生成图片 静态图片 转码过程 动态图片gif 二、图片生成视频 三、FFmpeg常用参数命令 3.1 主要参数 3.1.1、-i 3.1.2、-f 3.1.3、-ss 3.1.4、-t 3.2 音频参数 3.2.1、-aframes 3.2.2、 -b:a 3.2.3、-ar 3.2.4、-ac 3.2.5、-acodec 3.2.6、-an 3…

desmos和webgl绘制线条

目录 desmos绘制 webgl绘制 将线段坐标生成三角化坐标 处理斜接线段 处理圆角 尖角 先在desmos上面完成线条lineJoin绘制的,再将代码和公式转到js用webgl绘制. desmos绘制 示例 desmos计角斜接角时&#xff0c;需要用到的一些函数。在desmos定义成公共函数&#xff0c…

【全网最全】AI产品经理面试高频100题答案解析

详细的目录如下&#xff0c;需要的小伙伴可以详细看一下~ 第一章&#xff1a;机器学习和深度学习的关系 第二章&#xff1a;机器学习7大经典算法 算法一&#xff1a;K近邻算法【分类算法】 1.1 KNN 算法的实现原理 1.2 KNN应用场景举例&#xff1a;预测候选人能不能拿到 O…

心觉:激活潜意识财富密码:每天一练,财富自动来

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作200/1000天 为什么有些人总是轻而易举地吸引到财富 而你却努力多年仍然徘徊在财务的困境中&#xff1f; 你每天都在辛苦工作&…

LabVIEW离心泵监测系统

LabVIEW的离心泵监测系统在监测离心泵的运行状态&#xff0c;通过实时数据采集和故障预警&#xff0c;提高泵的运行效率和安全性。系统集成了多种传感器&#xff0c;利用Modbus RTU协议和RS485串口总线进行数据通信&#xff0c;通过LabVIEW软件平台实现数据处理和用户界面交互。…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中&#xff0c;我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如&#xff0c;我们介绍了以下案例&#xff1a; Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

Opencv:FisherFace算法实现人脸检测

目录 简介 实现步骤 1. 图像读取和预处理 2. 创建和训练识别器 3. 图像识别和结果展示 4、结果展示 总结 简介 在人工智能和计算机视觉领域&#xff0c;人脸识别是一项非常有趣且实用的技术。本文将向您介绍如何使用OpenCV库以及FisherFace算法实现人脸识别。我们将一步…

数据可视化-使用python制作词云图(附代码)

想象一下&#xff0c;当你写完一篇日记或者一篇文章后&#xff0c;想要知道里面哪些词语出现得最多。这时候&#xff0c;词云图就能派上用场了。它会统计出文章里每个词语出现的次数&#xff0c;然后把这些词语以不同大小的字体展示出来&#xff0c;出现次数越多的词语&#xf…

【MATLAB代码】基于RSSI原理的蓝牙定位程序(N个锚点、三维空间),源代码可直接复制

文章目录 介绍主要功能技术细节适用场景程序结构运行截图源代码详细教程:基于RSSI的蓝牙定位程序1. 准备工作2. 代码结构2.1 清理工作环境2.2 定义参数2.3 生成锚点坐标2.4 定义信号强度与距离的关系2.5 模拟未知点的位置2.6 定位函数2.7 绘图2.8 输出结果2.9 定义定位函数3. …

SSL---SSL certificate problem

0 Preface/Foreword 0.1 SSL certificate problem 开发过程中&#xff0c;gitlab-runner连接gitlab时候出现SSL 证书问题。 场景&#xff1a;公司的gitlab runner服务器引入了SSL证书&#xff0c;每年都会主动更新一次。当前的gitlab-runner运行在PC机器上&#xff0c;但是g…