首頁 > 後端開發 > C#.Net教程 > C語言怎麼合併兩個有序鍊錶

C語言怎麼合併兩個有序鍊錶

王林
發布: 2020-11-03 09:57:56
原創
6757 人瀏覽過

C語言合併兩個有序鍊錶的方法:拼接指定的兩個有序鍊錶的所有節點即可。例如兩個有序鍊錶分別為【1->2->4】和【1->3->4】,合併後的有序鍊錶為【1->1->2- >3->4->4】。

C語言怎麼合併兩個有序鍊錶

具體方法:

將兩個有序鍊錶合併為一個新的有序鍊錶並傳回。新鍊錶是透過拼接給定的兩個鍊錶的所有節點組成的。

(影片教學建議: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語言怎麼合併兩個有序鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板