2807。在鍊錶中插入最大公約數
難度:中
主題:鍊錶、數學、數論
給定一個鍊錶頭,其中每個節點都包含一個整數值。
在每對相鄰節點之間,插入一個新節點,其值等於它們的最大公約數。
回傳插入後的鍊錶.
兩個數的最大公約數是能整除兩個數的最大正整數。
範例1:
範例2:
範例 3:
約束:
提示:
解:
我們需要在鍊錶中的每對相鄰節點之間插入節點。插入節點的值應該是兩個相鄰節點值的最大公約數(GCD)。我們將遍歷鍊錶,計算每對相鄰節點的 GCD,然後相應地插入新節點。
以下是解決此問題的方法:
讓我們用 PHP 實作這個解決方案:2807。在鍊錶中插入最大公約數
<?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 ?>
ListNode 類別:此類別表示鍊錶中節點的結構,具有值 ($val) 和下一個節點 ($next) 的屬性。
GCD 計算:gcd 函數使用歐幾里德演算法計算兩個整數的最大公約數。
主要邏輯(插入最大公約數):
邊緣情況:如果清單只有一個節點,我們將按原樣返回它,不做任何更改,因為沒有相鄰節點。
測試:函數 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中文網其他相關文章!