ホームページ >バックエンド開発 >PHPチュートリアル >リンクされたリストに最大公約数を挿入する
2807。リンクされたリストに最大公約数を挿入
難易度: 中
トピック: 連結リスト、数学、数論
各ノードに整数値が含まれるリンク リストの先頭の先頭を指定します。
隣接するノードの各ペアの間に、それらの最大公約数に等しい値を持つ新しいノードを挿入します。
挿入後のリンクされたリストを返します。
2 つの数値の 最大公約数 は、両方の数値を均等に割る最大の正の整数です。
例 1:
リスト内のノード数は [1, 5000] の範囲内です。
左側の各ポイントは、左側のノードに既に接続されているポイントに正確に接続されるか、どのノードにも接続されていない右側のノードのサブセットに接続されます。
リンクされたリスト内の隣接するノードのすべてのペアの間にノードを挿入する必要があります。挿入されたノードの値は、2 つの隣接するノードの値の最大公約数 (GCD) である必要があります。リンクされたリストを走査し、隣接するノードのすべてのペアの GCD を計算し、それに応じて新しいノードを挿入します。
これに対処する方法は次のとおりです:
<?php // Definition for a singly-linked list node. class ListNode { public $val = 0; public $next = null; public function __construct($val = 0, $next = null) { $this->val = $val; $this->next = $next; } } /** * Function to calculate the GCD of two numbers. * * @param $a * @param $b * @return mixed */ function gcd($a, $b) { ... ... ... /** * go to ./solution.php */ } /** * @param ListNode $head * @return ListNode */ function insertGreatestCommonDivisors($head) { ... ... ... /** * go to ./solution.php */ } /** * Function to print the linked list for testing purposes. * * @param $head * @return void */ function printList($head) { $current = $head; while ($current != null) { echo $current->val . " "; $current = $current->next; } echo "\n"; } // Example usage: // Create the linked list: 18 -> 6 -> 10 -> 3 $head = new ListNode(18); $head->next = new ListNode(6); $head->next->next = new ListNode(10); $head->next->next->next = new ListNode(3); // Insert GCD nodes. $modifiedHead = insertGreatestCommonDivisors($head); // Print the modified linked list. printList($modifiedHead); // Output should be: 18 -> 6 -> 6 -> 2 -> 10 -> 1 -> 3 ?>
: このクラスは、値 ($val) と次のノード ($next) のプロパティを備えたリンク リスト内のノードの構造を表します。
: gcd 関数は、ユークリッド アルゴリズムを使用して 2 つの整数の最大公約数を計算します。
:
最後から 2 番目のノードに到達するまで、リンク リストをループします。: リストにノードが 1 つだけある場合は、隣接するノードがないため、変更を加えずにそのまま返します。
: 関数 printList は、検証のためにリンク リストの値を出力するために使用されるヘルパー関数です。
For the input list [18, 6, 10, 3], the output is:
18 -> 6 -> 6 -> 2 -> 10 -> 1 -> 3
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks ?. Your support would mean a lot to me!
If you want more helpful content like this, feel free to follow me:
以上がリンクされたリストに最大公約数を挿入するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。