我尝试解决https://leetcode.com/problems/add-two-numbers,这个问题很容易,但是由于借用问题我无法完全解决问题。我尝试了3个小时,我怀疑ListNode
的{{1}}的{{1}}字段类型不正确。
当我切换到c#时,我很快就解决了问题。以下是c#版本解决方案。我无法将其翻译成锈。
next
答案 0 :(得分:1)
根据@rodrigo建议。我终于以递归函数的方式解决了这个问题。
fn internal_add_two_number(
mut l1: &Option<Box<ListNode>>,
mut l2: &Option<Box<ListNode>>,
mut carry: i32,
) -> Option<Box<ListNode>> {
let mut sum = carry;
if l1.is_none() && l2.is_none() {
if carry > 0 {
return Some(Box::new(ListNode::new(carry)));
}
return None;
}
if let Some(p) = l1 {
sum += p.val;
l1 = &p.next;
}
if let Some(p) = l2 {
sum += p.val;
l2 = &p.next;
}
carry = sum / 10;
sum = sum % 10;
Some(Box::new(ListNode {
val: sum,
next: internal_add_two_number(l1, l2, carry),
}))
}
impl Solution {
pub fn add_two_numbers(
l1: Option<Box<ListNode>>,
l2: Option<Box<ListNode>>,
) -> Option<Box<ListNode>> {
internal_add_two_number(&l1, &l2, 0)
}
}