725。リンクされたリストを部分に分割
難易度: 中
トピック: リンクされたリスト
単一リンク リストの先頭と整数 k を指定すると、リンク リストを k 個の連続するリンク リスト部分に分割します。
各パーツの長さはできる限り同じである必要があります。2 つのパーツのサイズが 1 つ以上異なることはできません。これにより、一部の部分が null になる可能性があります。
パーツは入力リスト内の出現順に並べる必要があり、先に出現するパーツのサイズは常に後から出現するパーツ以上のサイズである必要があります。
k 個の部分の配列を返します。
例 1:
例 2:
制約:
ヒント:
解決策:
重要な点は、各パーツのノード数の差が 1 を超えてはいけないということです。これは次のことを意味します。
725。リンクされたリストを部分に分割
<?php // Definition for singly-linked list. class ListNode { public $val = 0; public $next = null; function __construct($val = 0, $next = null) { $this->val = $val; $this->next = $next; } } /** * @param ListNode $head * @param Integer $k * @return ListNode[] */ function splitListToParts($head, $k) { ... ... ... /** * go to ./solution.php */ } // Helper function to create a linked list from an array function createLinkedList($arr) { $head = new ListNode($arr[0]); $current = $head; for ($i = 1; $i < count($arr); $i++) { $current->next = new ListNode($arr[$i]); $current = $current->next; } return $head; } // Helper function to print a linked list function printList($head) { $result = []; while ($head !== null) { $result[] = $head->val; $head = $head->next; } return $result; } // Test case 1 $head = createLinkedList([1, 2, 3]); $k = 5; $result = splitListToParts($head, $k); foreach ($result as $part) { print_r(printList($part)); } // Test case 2 $head = createLinkedList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); $k = 3; $result = splitListToParts($head, $k); foreach ($result as $part) { print_r(printList($part)); } ?>
長さの計算: まず、リンクされたリストを走査してその長さを見つけます。
パーツの決定:
リストの分割: k 個の部分をループしてリストを分割します:
Null パーツの処理: ノードの数が k よりも少ない場合、残りのパーツは null (空) になります。
$head = [1,2,3]; $k = 5; Output: [[1],[2],[3],[],[]]
$head = [1,2,3,4,5,6,7,8,9,10]; $k = 3; Output: [[1,2,3,4],[5,6,7],[8,9,10]]
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub でリポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が。リンクされたリストを部分的に分割するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。