描述
给你一个链表的头 head
,每个结点包含一个整数值。
在相邻结点之间,请你插入一个新的结点,结点值为这两个相邻结点值的 最大公约数 。
请你返回插入之后的链表。
两个数的 最大公约数 是可以被两个数字整除的最大正整数。
思路
模拟执行
代码
impl Solution {
pub fn insert_greatest_common_divisors(mut head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
let mut cur = &mut head;
while cur.as_ref().unwrap().next.is_some() {
let x = cur.as_mut().unwrap();
let next = x.next.take();
x.next = Some(Box::new(ListNode {
val: Self::gcd(x.val, next.as_ref().unwrap().val),
next,
}));
cur = &mut cur.as_mut().unwrap().next.as_mut().unwrap().next;
}
head
}
fn gcd(mut a: i32, mut b: i32) -> i32 {
while a != 0 {
(a, b) = (b % a, a);
}
b
}
}