LootCode21:2つの順序付けられたリンクリストをマージします

1.タイトルの説明

2の順昇順に新たなリストにマージ昇順リストと戻ります。新しいリンクリストは、指定された2つのリンクリストのすべてのノードを接続することによって構成されます。

例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

2つの問題解決のアイデア

  1. まず、空のリストがあるかどうかを確認します

    if(l1==nullptr)
    	return l2;
    if(l2==nullptr)
    	return l1;
    
  2. マージされたリンクリストのヘッドノード(整数値が小さいノード)を決定します

    ListNode* head;
    l1->val>l2->val ? (head=l2,l2=l2->next):(head=l1,l1=l1->next); 
    
  3. 後続のノードを接続します

    while(l1!=nullptr&&l2!=nullptr){
          
                      
                l1->val>l2->val ? (p->next=l2,l2=l2->next):(p->next=l1,l1=l1->next);            
                p=p->next;            
            }
    

三、私のコード

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
    
    
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    
    
        if(l1==nullptr)
            return l2;
        if(l2==nullptr)
            return l1;
        ListNode* head;
        l1->val>l2->val ? (head=l2,l2=l2->next):(head=l1,l1=l1->next);        
        ListNode* p=head;
        while(l1!=nullptr&&l2!=nullptr){
    
                
            l1->val>l2->val ? (p->next=l2,l2=l2->next):(p->next=l1,l1=l1->next);            
            p=p->next;            
        }
        p->next=(l1==nullptr)? l2:l1;        
        return head;
    }
};

4、テスト結果

おすすめ

転載: blog.csdn.net/weixin_45341339/article/details/111086484