C语言/数据结构——每日一题(合并两个有序链表)

news/2025/4/1 6:19:35/

一.前言

嗨嗨嗨,大家好久不见!今天我在LeetCode看到了一道单链表题:https://leetcode.cn/problems/merge-two-sorted-lists想着和大家分享一下,废话不多说,让我们开始今天的题目分享吧。

二.正文

1.1题目描述

1.2题目分析

我们还是可以通过创建新链表的方法来解题:

1.首先我们创建新的单链表:ListNode* phead和ListNode* ptail分别作为新链表的头节点和尾节点。

2.其次我们再创建两个指针分别遍历上下两个链表:l1与l2。

3.如果l1小于或等于l2,那么将l1插入到我们的新链表中,并让l1移到下一个节点。

反之,那l2将插入到我们的新链表中,并让l2移到下一个节点。

需要注意的是如果phead初始是NULL的话,不论初始l1和l2谁大谁小都要让phead和ptail等于它们与之相对应的头节点。

例如:如果此时l1小于或等于l2,且phead=NULL。那摩就让phead=ptail=l1。

同理,反之,phead=ptail=l2。

1.3代码实现

/*** 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* phead;ListNode* ptail;phead=ptail=NULL;while(l1!=NULL&&l2!=NULL){
if((l1->val)<=(l2->val))
{if(phead==NULL){phead=ptail=l1;l1=l1->next;}else{ptail->next=l1;ptail=ptail->next;l1=l1->next;}
}
else
{if(phead==NULL){phead=ptail=l2;l2=l2->next;}else{ptail->next=l2;ptail=ptail->next;l2=l2->next;}
}}if(l1==NULL)ptail->next=l2;if(l2==NULL)ptail->next=l1;return phead;
}

值得注意的是:我们的while结束条件中有两种结束情况:l1=NULL或l2=NULL这两种情况。

当l1=NULL的时候说明l1链表中的元素已经全部插入到新链表中了了,但是l2中的元素还没有插入完,这时候就需要我们在最后让l2中没插入的数据直接插入到新链表后面。

同理,当l2=NULL的时候说明l2链表中的元素已经全部插入到新链表中了了,但是l1中的元素还没有插入完,这时候就需要我们在最后让l1中没插入的数据直接插入到新链表后面。

三.结言

今天的题目分享就到这了,同学们我们下期再见。


http://www.ppmy.cn/news/1454100.html

相关文章

C语言--带环链表问题

继续学习 一、判断链表是否带环 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;用快慢指针&#xff0c;快指针走两步&#xff0c;慢指针走一步&#xff0c;当慢指针走一半快指针进到环里 当慢指针进环&#xff0c;快指针已经在环中转了一会儿了 | |…

子比主题小黑屋列表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤1.引入库前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文…

【2024最新华为OD-C卷试题汇总】停车场车位统计(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; 文章目录 前…

组合API与响应性

响应性 什么是响应性 响应性是一种允许我们以声明式的方式去适应变化的一种编程范例。 Vue.js如何追踪数据的变化呢&#xff1f; 在生成Vue.js实例时&#xff0c;使用带有getter和setter的处理程序遍历传入的data&#xff0c;将其所有property转换为Proxy对象。 Proxy代理对象…

C++之模板

1、概述 模板是一个非常强大的功能。C STL的各种组件也是基于模板实现的&#xff08;vector、map、string等&#xff09;。 模板主要分为&#xff1a;函数模型和类模板。 2、函数重载 示例&#xff1a;使用函数重载&#xff0c;对两个相同类型的数值进行和运算&#xff08;flo…

软考网络工程师 第六章 第三部分 第一节 TCP/UDP报文格式

传输层TCP vs UDP TCP报文格式 TCP伪首部 TCP伪首部本质是IP头的一部分&#xff0c;包含源目IP地址&#xff0c;协议号、TCP报头和用户数据&#xff0c;主要用于TCP校验和计算 UDP报文格式 与TCP相比&#xff0c;做了很大精简&#xff0c;省略诸多控制字段 例题&#xff1a; …

一种算法分类方式及其应用

在计算机科学领域&#xff0c;算法是解决问题的有效方法&#xff0c;而对算法进行分类有助于理解它们的特性、优劣以及在不同场景下的应用。常见的算法分类方法&#xff0c;包括按设计思想、问题类型、数据结构和应用领域等&#xff0c;每一类算法会对应有其典型和实际应用。 算…

万界星空科技商业开源MES+项目合作+商业开源低代码平台

今天我想和大家分享的是一套商业开源的 MES制造执行管理系统带源码。对于制造业而言&#xff0c;MES 是一个至关重要的系统&#xff0c;它可以帮助企业提高生产效率、优化资源利用、提高产品质量&#xff0c;从而增强市场竞争力。 什么是 MES&#xff1f; MES 是指通过计算机技…