剣指offerは2つの並べ替えのチェーン時計を合併します

1833 ワード

タイトルの説明
2つの単調に増加したチェーンテーブルを入力し、2つのチェーンテーブルの合成後のチェーンテーブルを出力します.もちろん、合成後のチェーンテーブルは単調で減少しない規則を満たす必要があります.
構想
  • は、p,qの2つのノードポインタを宣言し、それぞれ2つのチェーンテーブルの現在のノードを指す.
  • はnewHeadを宣言し、新しいチェーンテーブルのヘッダポインタ、newPnowは新しいチェーンテーブルの現在のノードを指す.
  • p qの2つのノードが指す値は互いに比較され、新しいチェーンテーブルの現在のノードはそれが比較的小さいものを指し、その後は互いに前方に移動する.
  • チェーンテーブルが空の場合、新しいチェーンテーブルの現在のノードのnextポインタを別のチェーンテーブルに直接指し、後ろ自体が接続されています.

  • コード#コード#
    class Solution {
    public:
        ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
        {
            ListNode* p, *q, *newHead = NULL, *newPNow;
            p = pHead1;
            q = pHead2;
            
            if(pHead1 == NULL)
                return pHead2;
            else if(pHead2 == NULL)
                return pHead1;
            
            while(p != NULL && q != NULL)
            {
                if(p->val >= q->val)
                {
                    if(newHead == NULL)
                    {
                        newHead = q;
                        newPNow = q;
                        q = q->next;
                    }   
                    else
                    {
                        newPNow->next = q;
                        newPNow = q;
                        q = q->next;  
                    }
                }
                else
                {
                    if(newHead == NULL)
                    {
                        newHead = p;
                        newPNow = p;
                        p = p->next;
                    }
                    else
                    {
                        newPNow->next = p;
                        newPNow = p;
                        p = p->next;    
                    }
    
                }
            }
            if(p == NULL)
            {
                    newPNow->next = q; 
            }
            else if(q == NULL)
            {
                    newPNow->next = p;
            }
            return newHead;
        }
    };