SwordはOffer25を指します-2つのソートされたリンクリストをマージします-簡単

質問リンク

タイトル説明:

2つのリンクリストを昇順で入力し、2つのリンクリストをマージして、新しいリンクリストのノードを昇順のままにします。

たとえば、次のように入力します。

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

データ範囲:

0 <= 链表长度 <= 1000

問題解決のアイデア:

1.短いノード、head3、およびこのノードへのテールポイントを同時に初期化します。head1、head2は、2つのリンクリストのヘッドノードです
。2。ループマージ。

  • head1とhead2がnullでない場合に実行します
    • head1-> val> head2-> val、head3の後続ノードはhead1であり、head1は1ステップ後退します
    • head2-> val> head1-> val、head3の後続ノードはhead2、head2は1ステップ後退します
  • 残りの部分をマージします(ループの外はhead1であり、head2は最後までトラバースする必要があります(つまり、null)
    • head1がnullではない、head3-> next = head1
    • head2がnullではない、head3-> next = head2
  • テールを返す->次へ

ACコード(c ++)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
    
    
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    
    
        ListNode * head1 = l1;
        ListNode * head2 = l2;
        ListNode * head3 =  new ListNode();
        ListNode * tail = head3;
        while(head1 && head2){
    
    
            if(head1->val <= head2->val){
    
    
                head3->next = head1;
                head1=head1->next;
            }else{
    
    
                head3->next = head2;
                head2=head2->next;
            }
            head3 = head3->next;
        }
        if(head1){
    
    
            head3->next = head1;
        }
        if(head2){
    
    
           head3->next = head2;
        }
        return tail->next;
    }
};

おすすめ

転載: blog.csdn.net/Yang_1998/article/details/113058190