C语言合并两个有序链表的方法:拼接指定的两个有序链表的所有节点即可。例如两个有序链表分别为【1->2->4】和【1->3->4】,合并后的有序链表为【1->1->2->3->4->4】。
具体方法:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
(视频教程推荐:java课程)
输入:
立即学习“C语言免费学习笔记(深入)”;
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->valval){ 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->valval){ 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->valval){ 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->valval){ list->next = list1; list=list->next; list->next=list2; }else{ list->next=list2; list=list->next; list->next=list1; } } return l;}
登录后复制
图文教程分享:java入门
以上就是C语言怎么合并两个有序链表的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2432665.html