『剣指Offer』-25.2つのソートされたチェーンテーブルをマージ

2112 ワード

問題を解く
2つの増分ソートされたチェーンテーブルを入力し、2つのチェーンテーブルを結合し、新しいチェーンテーブルのノードが増分ソートされるようにします.例えば、下図のチェーンテーブル1とチェーンテーブル2を入力すると、マージ後の昇順チェーンテーブルがチェーンテーブル3に表示されます.チェーンテーブルノードは次のように定義されます.
class ListNode {
    int val;
    ListNode next;
}

チェーンテーブル1
graph LR
1-->3
3-->5
5-->7

チェーンテーブル2
graph LR
2-->4
4-->6
6-->8

チェーンテーブル3
graph LR
1-->2
2-->3
3-->4
4-->5
5-->6
6-->7
7-->8

問題を解く構想.
2つのチェーンテーブルのヘッダノードを取り出して比較し,値の小さいヘッダノードを取り,それを最終チェーンテーブルの末尾に統合し,残りのノードからなるチェーンテーブルのヘッダノードを比較し,比較可能なノードがずっと比較されていない場合に終了する.
コード実装
$name = $value;
    }

    public function __get($name)
    {
        return $this->$name;
    }
}

function getList1()
{

    $node1 = new ListNode();
    $node1->val = 1;
    $node2 = new ListNode();
    $node2->val = 3;
    $node1->next = $node2;
    $node3 = new ListNode();
    $node3->val = 5;
    $node2->next = $node3;
    $node4 = new ListNode();
    $node4->val = 7;
    $node3->next = $node4;

    return $node1;
}

function getList2()
{
    $node1 = new ListNode();
    $node1->val = 2;
    $node2 = new ListNode();
    $node2->val = 4;
    $node1->next = $node2;
    $node3 = new ListNode();
    $node3->val = 6;
    $node2->next = $node3;
    $node4 = new ListNode();
    $node4->val = 8;
    $node3->next = $node4;

    return $node1;
}

function mergeList($head1, $head2)
{
    if ($head1 == null) {
        return $head2;
    }

    if ($head2 == null) {
        return $head1;
    }

    $mergeHead = null;
    if ($head1->val < $head2->val) {
        $mergeHead = $head1;
        $mergeHead->next = mergeList($head1->next, $head2);
    } else {
        $mergeHead = $head2;
        $mergeHead->next = mergeList($head1, $head2->next);
    }

    return $mergeHead;
}

var_dump(mergeList(getList1(), getList2()));