C语言怎么合并两个有序链表
C语言合并两个有序链表的方法:拼接指定的两个有序链表的所有节点即可。例如两个有序链表分别为【1->2->4】和【1->3->4】,合并后的有序链表为【1->1->2->3->4->4】。
具体方法:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:
1->2->4, 1->3->4
输出:
1->1->2->3->4->4
分析:两个链表为有序链表,所以依次遍历两个链表比较大小即可。
代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if(l1==NULL){
return l2;
}
if(l2==NULL){
return l1;
}
struct ListNode *l = (struct ListNode*)malloc(sizeof(struct ListNode));
l->next = NULL;
struct ListNode *list1 = l1;
struct ListNode *list2 = l2;
if(l1->valval){
l->val=l1->val;
if(list1->next==NULL){
l->next=list2;
return l;
}
list1=list1->next;
}else{
l->val=l2->val;
if(list2->next==NULL){
l->next=list1;
return l;
}
list2=list2->next;
}
struct ListNode *list = l;
while(list1->next!=NULL&&list2->next!=NULL){
if(list1->val<=list2->val){
struct ListNode *body = (struct ListNode *)malloc(sizeof(struct ListNode));
body->val = list1->val;
body->next = NULL;
list->next = body;
list = list->next;
list1 = list1->next;
}else{
struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
body->val=list2->val;
body->next=NULL;
list->next=body;
list=list->next;
list2=list2->next;
}
}
if(list1->next==NULL){
while(list2->next!=NULL){
if(list1->val<=list2->val){
list->next = list1;
list = list->next;
list->next=list2;
return l;
}else{
struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
body->val=list2->val;
body->next=NULL;
list->next=body;
list=list->next;
list2=list2->next;
}
}
}else{
while(list1->next!=NULL){
if(list2->val<=list1->val){
list->next=list2;
list=list->next;
list->next=list1;
return l;
}else{
struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
body->val=list1->val;
body->next=NULL;
list->next=body;
list=list->next;
list1=list1->next;
}
}
}
if(list1->next==NULL&&list2->next==NULL){
if(list1->val<=list2->val){
list->next = list1;
list=list->next;
list->next=list2;
}else{
list->next=list2;
list=list->next;
list->next=list1;
}
}
return l;
}
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
C语言怎么合并两个有序链表相关推荐
- LeetCode 21.23.剑指 Offer II 078. 合并两个有序链表 | C语言版
LeetCode 21. 合并两个有序链表 | C语言版 LeetCode 21. 合并两个有序链表 题目描述 解题思路 思路一:使用栈 代码实现 运行结果 参考文章: 思路二:减少遍历节点数 代码实 ...
- 合并两个有序链表 C语言 leetcode21题
目录 1.题目来源 2.函数介绍 3.问题示例 4.函数实现 代码 1.题目来源 21. 合并两个有序链表 - 力扣(LeetCode)https://leetcode.cn/problems/mer ...
- LeetCode题组:第21题-合并两个有序链表
1.题目:合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出: ...
- 两个有序链表序列的交集_LeetCode | 21.合并两个有序链表
点击上方蓝字关注我们 1.LeetCode | 2.两数相加 2.LeetCode | 206.反转链表 3.LeetCode | 1.两数之和 4.LeetCode | 703.数据流中的第K大元素 ...
- 两个有序链表序列的交集_剑指offer第21天:合并两个有序链表
我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复[资源],即可获取!更可回复[内推]加入 BAT 内推群! 01.题目分析 第21题:合并两个有序链表 将两个有序链表合并 ...
- 021合并两个有序链表
合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. C语言: /*** Definition for singly-linked lis ...
- 合并两个有序链表(递归)
合并两个有序链表(递归) 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 输入:1->2->4, 1->3->4 ...
- 【每日一算法】 合并两个有序链表
微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...
- 【Java】leetCode 21 合并两个有序链表
题目 : 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 解题思路 : 1.依据以上两个升序链表进行拼接: 2.先定义一个傀儡节点newHead,用来 ...
最新文章
- 2011年中国程序员薪水调查报告
- windows程序崩溃生成dump文件
- pr导入html文件,视频怎么导入Premiere啊?
- kafka批量启动脚本
- windows修改时间服务器,在Windows中设置时间服务器 2012 R2
- Golang——枚举(iota)的使用
- SVG 入门教程系列列表
- 在C#中嵌入Flash对象时遇到未能导入activex 控件的问题
- javascript面向对象系列第三篇——实现继承的3种形式
- 指向结构体变量的指针变量
- 2013dgtcs 数对
- 自建gitHub的webhook消息通知设计思路及成功验证结果
- VB代码VB小程序:实现USB摄像头视频图像的监控、截图、录像
- GitHub使用教程
- 小程序中如何使用vantUi库
- 阅读随笔摘录(来自刘强东自述-我的经营模式)
- c语言int函数使用方法,int函数的使用方法_Excel中int函数的操作用法
- eclipse windows 窗口背景颜色 保护视力
- 各种逆元求法 组合数取模 comb (组合数 Lucas)
- 如何在自己设置家里的路由器DNNS,并实现远程管理路由器。