C语言怎么合并两个有序链表
C語言合并兩個有序鏈表的方法:拼接指定的兩個有序鏈表的所有節(jié)點即可。例如兩個有序鏈表分別為【1->2->4】和【1->3->4】,合并后的有序鏈表為【1->1->2->3->4->4】。
具體方法:
將兩個有序鏈表合并為一個新的有序鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。
輸入:
1->2->4, 1->3->4
輸出:
1->1->2->3->4->4
分析:兩個鏈表為有序鏈表,所以依次遍歷兩個鏈表比較大小即可。
代碼實現(xiàn):
/**
?* 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;
}
聲明:
本文于網(wǎng)絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯(lián)系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的C语言怎么合并两个有序链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么把照片合成一张图片(手机合成照片方法
- 下一篇: 四氯化碳灭火器主要用于扑救 四氯化碳灭火