l1: Option<Box<ListNode>>,
l2: Option<Box<ListNode>>,
) -> Option<Box<ListNode>> {
let next_y = |l2: &mut Option<Box<ListNode>>| {
let next = l2.as_mut()?.next.take();
Some(std::mem::replace(l2, next)?.val)
};
let mut cf = 0;
let mut x = &mut l1;
let node = || Box::new(ListNode::new(0));
loop {
let d = x.is_none().then(|| l2.take()).flatten();
let y = match next_y(&mut l2) {
Some(y) => y,
_ if cf > 0 => 0,
_ => break l1,
};
let lhs = x.get_or_insert_with(|| d.unwrap_or_else(node));
lhs.val += y + cf;
cf = lhs.val / 10;
lhs.val %= 10;
x = &mut lhs.next;
}
}
Да я в очередной раз не так сообщение прочитал, поэтому решил удалить
Обсуждают сегодня