Niuke Top101 JS は 2 つのソートされたリストをマージします

説明

2 つの増加するリンク リストを入力し、1 つのリンク リストの長さは n で、2 つのリンク リストをマージし、新しいリンク リスト内のノードが増分的にソートされるようにします。

データ範囲: 0 ≤ n ≤ 1000、-1000 ≤ ノード値 ≤ 1000
要件: 空間計算量 O(1)、時間計算量 O(n)

たとえば、{1,3,5}、{2,4,6} が入力された場合、結合されたリンク リストは {1,2,3,4,5,6} となるため、対応する出力は {1,2 となります。 ,3, 4,5,6} の変換プロセスを次の図に示します。

                        

 または、{-1,2,4}、{1,3,4} と入力すると、マージされたリンク リストは {-1,1,2,3,4,4} となるため、対応する出力は {-1,1 , 2,3,4,4} の変換プロセスを次の図に示します。

                   

 

例1

入力:

{1,3,5}、{2,4,6}

戻り値:

{1,2,3,4,5,6}

例 2

入力:

{}、{}

戻り値:

{}

例 3

入力:

{-1,2,4}、{1,3,4}

戻り値:

{-1,1,2,3,4,4}

本旨:

まず、2 つのリンク リストの一方が空かどうかを判断する必要があります。空の場合は、もう一方のリンク リストを直接 (何もせずに) 返します。次にヘッダーを初期化します。最初のリンク リストの最初の値が 2 番目のリンク リストの最初の値以下の場合、ヘッダーは最初のリンク リストの最初の値に初期化され、それより大きい場合はヘッダーが初期化されます。 2 番目のリンク リストに初期化されます。 の最初の値、次のキー ポイント: 後で返せるように、メーター ヘッダーの最初のポインタの位置を必ず保存してください。

次のステップは、マージ操作を実行することです。ループの条件は、最初のリンク リストまたは 2 番目のリンク リストのいずれかがリンク リストの最後に到達すると停止し、マージ操作は次の条件と一致します。マージソートの考え方なので、ここでは多くは言いません。わかりません。分からない友達は下に降りて自分で見直してください〜。完全なコードは次のとおりです。

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function Merge(pHead1, pHead2)
{
    // write code here
    let p1,p2=null;
    let pnew=null;
    p1=pHead1;
    p2=pHead2;
    // 判断:如果有一个已经为空了就返回另外一个
    if(p1===null) {
        return p2;
    }
    if(p2===null)
     {
        return p1;
    }
    if(p1.val<=p2.val) {
        pnew=p1;
        p1=p1.next;
    }
    else {
         pnew=p2;
         p2=p2.next;
    } 
    let res=pnew;   
    while(p1!==null&&p2!==null) {
    if(p1.val<=p2.val) {
        pnew.next=p1;
        p1=p1.next;
    }
    else {
        pnew.next=p2;
        p2=p2.next;
    }
        pnew=pnew.next;
    }
    if(p1===null) {
        pnew.next=p2;
    }
    if(p2===null) {
        pnew.next=p1;
    }
    return res;
}

module.exports = {
    Merge : Merge
};

おすすめ

転載: blog.csdn.net/qq_43781887/article/details/128182302