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;
}
热门推荐
为啥越来越多人不用微波炉?加热食物真的有毒还致癌?告诉你真相
大禹与夏启:谁是夏王朝的第一代帝王?
爆火的啫啫煲,还是没跑出头部
心脏健不健康,主要看4个指标!
如何用 am,pm 来表达“上午”和“下午”
武汉7处亲子游玩胜地,从主题乐园到自然景观,总有一处适合你
2024年4月住房租赁产业发展报告
演变与展望:Wi-Fi技术的无限未来
中国茶文化的地域特色与差异
软路由的工作原理是什么
记住黑色素瘤的ABCDE!早发现,早治疗!
富裕心态:财富管理与个人成长
直播间是否靠谱有了评价规范:售后保障、用户反馈是重要指标
《黑神话:悟空》火了!中国古建“出圈”了!
清华大学时松海课题组揭示前额叶皮层神经元初级纤毛调控动物压力的新机制
防盗锁芯ABC级别详解:如何选择最安全的门锁?
牙齿的结构组成大揭秘全解析!牙冠牙根牙颈三部分缺一不可,快来了解牙齿的奥秘吧!
中国传统建筑之朝代分辨指南:十种形制风格识别各朝代建筑
古代皇后与六宫的掌管
日本专家如此看待缅甸大地震
如何看待黄金投资的长期价值与短期收益?这种价值和收益如何平衡?
揭秘外星生命:三大假设解析,为何它们迟迟未与我们相见?
麻油减肥:关键在于合理食用
前端如何防止抓包
遇见即是有缘:珍惜每一次的相逢
红薯是治疗心血管疾病的良药
铁锅保养秘籍:让你的铁锅远离生锈,持久如新,建议收藏
出国留学健康体检指南
长坂坡之战甘夫人是如何脱困的?她的皇后之位又是怎么来的?
孙夫人:左将军刘备的妻子,她嫁给刘备后经历了什么?