当前位置: 首页 > news >正文

LeetCode 21. 合并两个有序链表

21. 合并两个有序链表

题目链接:21. 合并两个有序链表

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

/*** 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* newHead = NULL;ListNode* newTail = NULL;//创建两个遍历指针ListNode* l1 = list1;ListNode* l2 = list2;while(l1 && l2){//l1小if(l1->val < l2->val){//新链表为空if(newHead == NULL){newHead = newTail = l1;}else //新链表不为空{newTail->next = l1;newTail = newTail->next;}l1 = l1->next;}//l2小或相等else{//新链表为空if(newHead == NULL){newHead = newTail = l2;}else //新链表不为空{newTail->next = l2;newTail = newTail->next;}l2 = l2->next;}}//l1不为空if(l1){newTail->next = l1;}//l2不为空if(l2){newTail->next = l2;}return newHead;
}

以上代码中在插入 l1 和 l2 的时候分链表为空和不为空的代码十分冗余,可以先通过malloc 为链表分配一个哨兵位就可以解决这个问题,最后再将哨兵位给释放掉即可。

/*** 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* newHead = NULL;ListNode* newTail = NULL;newHead = newTail = (ListNode*)malloc(sizeof(ListNode));//创建两个遍历指针ListNode* l1 = list1;ListNode* l2 = list2;while(l1 && l2){//l1小if(l1->val < l2->val){newTail->next = l1;newTail = newTail->next;l1 = l1->next;}//l2小或相等else{newTail->next = l2;newTail = newTail->next;l2 = l2->next;}}//l1不为空if(l1){newTail->next = l1;}//l2不为空if(l2){newTail->next = l2;}ListNode* ret = newHead->next;free(newHead);newhead = NULL;return ret;
}

解题思路:

  • 创建新链表
  • 遍历原链表,比较大小
  • 谁小尾插到新链表中
http://www.dtcms.com/a/270296.html

相关文章:

  • C#Halcon从零开发_Day18_OCR识别
  • 4. isaac sim4.2 教程-Core API-Hello robot
  • 【计算机组成原理】-CPU章节学习篇—笔记随笔
  • Linux 第一个系统程序 - 进度条
  • (C++)list列表相关基础用法(C++教程)(STL库基础教程)
  • 跨越NLP的三重曲线:从词法到叙事的进化之路
  • 使用python的 FastApi框架开发图书管理系统-前后端分离项目分享
  • huggingface笔记:文本生成Text generation
  • EXCEL(带图)转html
  • 基于LiteOS与SLE的多任务无线控制器项目实战
  • 深圳凭物联网软件开发构建智慧‘城市大脑‘
  • 什么是 3D 文件?
  • UE material advance 学习笔记
  • 【时时三省】(C语言基础)怎样引用指针变量
  • 免安装图片修改软件,一键批量处理
  • 16018.UE4+Airsim仿真环境搭建
  • 详细页智能解析算法:洞悉海量页面数据的核心技术
  • 软件系统测试的基本流程
  • 【PyTorch项目实战】VisRAG:基于视觉的多模态文档检索增强生成(文本+图像)
  • Android 事件分发机制深度解析
  • Android 中的多线程编程全面解析
  • YOLO融合[ICLR2025]PolaFormer中的极性感知线性注意力
  • docker proxy
  • C 解压文件
  • Day55 序列预测任务介绍
  • Subject vs Flowable vs Observable 对比
  • 【零基础学AI】第31讲:目标检测 - YOLO算法
  • 每日算法刷题Day44 7.8:leetcode前缀和4道题,用时1h40min
  • JVM 为什么使用元空间(Metaspace)替换了永久代(PermGen)?——深入理解 Java 方法区与类元数据存储的演进
  • 视频能转成gif动图吗?怎么弄?