ListNode的下一个字段类型为Option <Box <ListNode >>,是否正确?

时间:2019-08-03 02:47:50

标签: rust

我尝试解决https://leetcode.com/problems/add-two-numbers,这个问题很容易,但是由于借用问题我无法完全解决问题。我尝试了3个小时,我怀疑ListNode的{​​{1}}的{​​{1}}字段类型不正确。

当我切换到c#时,我很快就解决了问题。以下是c#版本解决方案。我无法将其翻译成锈。

next

1 个答案:

答案 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)
    }
}