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;
}
热门推荐
少儿美术教育中提升儿童绘画创造力的方法有哪些?
还你一城山泉河湖 济南打造宜居城市
乙酰半胱氨酸补剂(NAC)的8种功效及副作用(6点使用禁忌请小心)
磷酸铁锂每天80%-100%循环对电池好吗?
9个韩系松弛感拍照姿势,自然简约,慵懒又高级,拍出生活氛围感
笔记本电脑怎么连wifi?最全方法看这里
东北黑蜂:中国特有蜜蜂品种的详细介绍
LM2596输入输出电压以及负载特性测试报告
西游记中,佛祖为何要安排阿难和迦叶向唐僧索贿?作者有何深意
哲学思维最高境界:从批判性思考到全球视野
成年人都喜欢玩什么游戏?适合成年人玩的游戏推荐
扎马步一般坚持多久
如何用灯光布置让家更温馨舒适?一盏主灯已out!
揭秘校园灵异照片背后的神秘世界,真实、幻觉还是未知的力量?
如何进行软件产品的功能迭代
品味文言文中的情感表达
維生素A的祕密:來源、功效與攝取技巧大公開!
别再旁观你的生命了!隐性拖延症有多可怕?5个心理学,马上变得自律!
“妈妈,我这次没考好…”父母这样聊成绩,孩子学习后劲足
专科生的职业规划与发展路径:如何为未来铺路?
什么是大金融行业
最新数据:博士“就业率”,不如本科
王健林只用了6招,就还完了天量欠债,如今不欠别人一分钱!
如何优化CRM业务流以提升客户满意度和销售效率?
Unity 3D入门教程:创建一个可以弹跳的小球
倾诉的力量:在对话中寻找理解与共鸣
首付降了,利率也低了!如何利用好手上的房产,实现小目标?
空气能热泵与燃气热水器:究竟哪个更好?
5060显卡与4070显卡对比:性能、功耗和技术创新全方位解析
从“六礼”看古代媒人的地位和作用