輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則

 

題目:輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則

分析:先找兩個鏈表中第一個元素較小的結點做新鏈表的頭,然後依次比較兩個鏈表的元素,將小的尾插在新鏈表中(爲了尾插方便,這裏使用了尾指針標記新鏈表的尾),只要有一個結束了,就將另一個(即還有剩餘元素的鏈表)之間掛在新鏈表的尾上。

 ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        //如果其中一個是空,那麼就返回另外一個
        if(pHead1==nullptr)
            return pHead2;
        else if(pHead2==nullptr)
            return pHead1;
        
        ListNode* head;//新鏈表的頭
        ListNode* tail;//新鏈表的尾
        
        //看那個鏈表的第一個元素小,讓其做新鏈表的頭
        if(pHead1->val<pHead2->val)
        {
            head=pHead1;
            pHead1=pHead1->next;
        }
        else
        {
            head=pHead2;
            pHead2=pHead2->next;
        }
        tail=head;//並且剛開始讓tail也指向第一個節點
        
        //只要有一個結束就結束(挨着比較,將兩個鏈表中較小的元素尾插在新鏈表中)
        while(pHead2 && pHead1)
        {
            if(pHead1->val<pHead2->val)
            {
                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;//最後返回新鏈表的頭
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章