C语言实现两个有序链表的合并
创作时间:
作者:
@小白创作中心
C语言实现两个有序链表的合并
引用
CSDN
1.
https://blog.csdn.net/2401_83440536/article/details/139390988
本文将详细介绍如何使用C语言实现两个有序链表的合并。通过对比两种不同的实现方法,帮助读者理解链表操作的核心思路和优化技巧。
题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
方法一:
思路
核心是通过比大小将小的节点取下来尾插。
解题方法
写一个新的链表,创造一个新头节点,因为是尾插所以需要找尾,但是每次找尾时间复杂度会变成n2,所以每次尾插后需要将尾更新。最后如果链表长度不一致再将非空链表取下来连接。
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
if(list1==NULL)
{
return list2;
}
if(list2==NULL)
{
return list1;
}
struct ListNode* head=NULL,*tail=NULL;
//将头节点取小放入新节点
if(list1->val<list2->val)
{
head=tail=list1;
list1=list1->next;//链表迭代
}
else
{
head=tail=list2;
list2=list2->next;//链表迭代
}
//取小的下来尾插
while(list1 && list2)
{
if(list1->val>list2->val)
{
tail->next=list2;
list2=list2->next;
}
else
{
tail->next=list1;
list1=list1->next;
}
tail=tail->next;
}
if(list1)//list1不为空
{
tail->next=list1;
}
else//list2不为空
{
tail->next=list2;
}
return head;
}
优化
思路
利用带哨兵卫的方法,开辟新链表的头节点,头节点不存数据。这样做就可以免去第一次比较再插入
解题方法
开辟一个节点空间赋值给新链表的头节点,不存数据,在链表完成后,将此节点删掉。
代码优化
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
if(list1==NULL)
{
return list2;
}
if(list2==NULL)
{
return list1;
}
struct ListNode* head=NULL,*tail=NULL;
//带哨兵卫的办法
head=tail=(struct ListNode*)malloc(sizeof(struct ListNode));
//取小的下来尾插
while(list1 && list2)
{
if(list1->val>list2->val)
{
tail->next=list2;
list2=list2->next;
}
else
{
tail->next=list1;
list1=list1->next;
}
tail=tail->next;
}
if(list1)//list1不为空
{
tail->next=list1;
}
else//list2不为空
{
tail->next=list2;
}
struct ListNode* relHead=head->next;//因为要返回头节点所以需要将新链表的头存入
free(head);
return relHead;
}
热门推荐
辟谷减肥险些丧命?医生紧急提醒!
揭秘自动酿酒综合征:克雷伯菌是罪魁祸首?
揭秘自动酿酒综合征:身体里藏着"酿酒厂"的罕见疾病
澳洲留学转专业需要了解哪些要求
打破学科壁垒:高校转专业政策的创新之路
打破学科壁垒:高校转专业政策的创新之路
职场白领必看:如何避免胃炎?
艾司奥美拉唑:慢性胃炎治疗的得力助手
油腻辣食是胃炎大敌!你吃对了吗?
治疗费平均20万!一文读懂抗癌“神器”质子、重离子和硼中子,到底选哪个?
唐朝有哪五个大都督府?
进大学再转专业,真没想象中那么简单
如何判断对方是否适合你?
如何找到你的灵魂伴侣?
异地恋沟通技巧:让感情跨越时空的阻隔
用心理学技巧应对感情困扰?试试这些方法!
如何打造高效网络攻防团队?
企业网络安全风险评估:从框架到实践的全方位指南
缙云县:一座宜居宜业宜游宜学的江南古城
浙江这个县城,一下车就变“仙女”
肖战双片定档:《得闲谨制》vs《射雕英雄传》,你更期待哪一部?
肖战助力“百人援吉”:以公益行动传递正能量
《梦中的那片海》收视爆表!肖战用演技征服观众
磨刀器选购指南与使用技巧
菜刀应该用什么度数?
关注孩子体温变化,掌握测量与应对发烧的有效方法
生命的拥抱:海姆立克急救法
刀郎为什么这么热?音乐的成功是因为共鸣
6-15年车龄车辆年检要求更新!
肖战《射雕英雄传》花絮揭秘:真功夫震撼网友!