[Linked List OJ] 順序付けられた 2 つのリンク リストをマージする

私をクリックして質問をしてください

トピックを参照してください:

2 つの昇順リストを新しい 昇順 リストにマージして返します。新しい連結リストは、指定された 2 つの連結リストのすべてのノードを接合することによって形成されます。 

例 1: 

入力: l1 = [1,2,4]、l2 = [1,3,4]
出力: [1,1,2,3,4,4]

例 2: 

入力: l1 = []、l2 = []
出力: []

例 3:

入力: l1 = []、l2 = [0]
出力: [0]

問題解決: 

アイデア: 

与えられた 2 つの連結リストは昇順であるため、2 つの連結リストの値を最初から比較し、小さい方から前の値を見つけやすくするために、ダミー ノードを作成して表すことができます。前のノード. アニメーションは次のとおりです。

コード:

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    // 创建哑结点
    struct ListNode {
    int val = -1;
    struct ListNode *next;
    }dummy;
    // 表示前一个结点
    struct ListNode* prev = &dummy;
    // 二者均非空,则进行比较
    while(list1 && list2)
    {
        if(list1->val < list2->val)
        {
            prev->next = list1;
            list1 = list1->next;
        }
        else
        {
            prev->next = list2;
            list2 = list2->next;
        }
        prev = prev->next;
    }
    prev->next = list1 == NULL?list2:list1;
    return dummy->next;
}

この記事は終わりです。

おすすめ

転載: blog.csdn.net/Claffic/article/details/130189732