2つの単調に増加するチェーンテーブルを入力し、2つのチェーンテーブルの合成後のチェーンテーブルを出力します.もちろん、合成後のチェーンテーブルは単調で減少しない規則を満たす必要があります.

1651 ワード


タイトル:2つの単調に増加するチェーンテーブルを入力して、2つのチェーンテーブルの合成後のチェーンテーブルを出力して、もちろん私達は合成後のチェーンテーブルが単調で減らない規則を満たす必要があります
解析:まず、2つのチェーンテーブルの最初の要素の小さいノードを探して新しいチェーンテーブルのヘッダを作成し、2つのチェーンテーブルの要素を順番に比較し、小さなテールを新しいチェーンテーブルに挿入します(テールポインタを使用して新しいチェーンテーブルのテールをマークします).1つが終わると、もう1つの(つまり、残りの要素があるチェーンテーブル)の間に新しいチェーンテーブルのテールに掛けます.
 ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        //        ,         
        if(pHead1==nullptr)
            return pHead2;
        else if(pHead2==nullptr)
            return pHead1;
        
        ListNode* head;//     
        ListNode* tail;//     
        
        //            ,        
        if(pHead1->valval)
        {
            head=pHead1;
            pHead1=pHead1->next;
        }
        else
        {
            head=pHead2;
            pHead2=pHead2->next;
        }
        tail=head;//      tail        
        
        //          (    ,                  )
        while(pHead2 && pHead1)
        {
            if(pHead1->valval)
            {
                tail->next=pHead1;
                pHead1=pHead1->next;
            }
            else
            {
                tail->next=pHead2;
                pHead2=pHead2->next;
            }
            //        ,         tail  
            tail=tail->next;
        }
        
        //   ,           ,                tail   
        if(pHead1!=nullptr)
        {
            tail->next=pHead1;
        }
        if(pHead2!=nullptr)
        {
            tail->next=pHead2;
        }
        
        return head;//         
    }