c语言合并两个有序链表的方法:拼接指定的两个有序链表的所有节点即可。例如两个有序链表分别为【1->2->4】和【1->3->4】,合并后的有序链表为【1->1->2->3->4->4】。
具体方法:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
(视频教程推荐:java课程)
输入:
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->val<l2->val){ 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;}
图文教程分享:java入门
以上就是c语言怎么合并两个有序链表的详细内容。