オファー-16。マージ2つのソートされたリストを受賞(C ++ / Javaの)

トピック:

ルールの減少 - 私たちは会う合成リストする必要があることをした後、二人は単調に、当然のことながら、二つのリストを合成した後、入力リストおよび出力リストを増加させることができます。

分析:

新しいノードであってもよいし、電流値がP1とP2、新しいノード= P1、次のノードにP1、新しいノードもpよりも小さい場合、2つの値は、次に、現在のノードの単調増加リスト来る比較次のノードに移動します。

もちろん、あなたは再帰を行うことができます。C ++標準の練習、Javaの再帰的。

手順:

C ++

クラスのソリューション{
 パブリック
    ListNode *マージ(ListNode * pHead1、ListNode * pHead2)
    { 
        場合(pHead1 == nullptr)
             リターンpHead2。
        もし(pHead2 == nullptr)
             を返すpHead1を。
        ListNode resHead(0 )。
        ListNode * p =&resHead。
        一方、(pHead1 && pHead2){
             場合(pHead1->ヴァル<pHead2-> ヴァル){ 
                P >次= - ; pHead1 
                pHead1 = pHead1->次; 
            } 
            { 
                P - >次= pHead2。
                pHead2 = pHead2-> 次。
            } 
            P = P-> 次。
        } 
        であれば(pHead1)
            P - >次= pHead1。
        もし(pHead2)
            P - >次= pHead2。
        返すresHead.nextを。
    } 
}。

ジャワ

パブリック クラスソリューション{
     パブリックListNodeマージ(ListNode LIST1、ListNode LIST2){
         場合(LIST1 == NULL戻りLIST2。
        もし(LIST2 == nullのリターンリスト1。
        もし(list1.val < list2.val){ 
            list1.next = マージ(list1.next、LIST2)。
            戻り値のリスト1。
        } 
        { 
            list2.next = マージ(LIST1、list2.next)。
            リターンLIST2。
        } 
    } 
}

おすすめ

転載: www.cnblogs.com/silentteller/p/11886551.html