1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54  // @Title: 两数相加 (Add Two Numbers) // @Author: 15816537946@163.com // @Date: 2022-01-31 15:25:15 // @Runtime: 0 ms // @Memory: 2.1 MB // Definition for singly-linked list. // #[derive(PartialEq, Eq, Clone, Debug)] // pub struct ListNode { // pub val: i32, // pub next: Option> // } // // impl ListNode { // #[inline] // fn new(val: i32) -> Self { // ListNode { // next: None, // val // } // } // } // struct Solution; // use crate::utils::linked_list::{to_list, ListNode}; impl Solution { pub fn add_two_numbers( l1: Option>, l2: Option>, ) -> Option> { match (l1, l2) { (None, None) => None, (None, Some(n)) | (Some(n), None) => Some(n), (Some(n1), Some(n2)) => { let sum = n1.val + n2.val; if sum < 10 { Some(Box::new(ListNode { val: sum, next: Solution::add_two_numbers(n1.next, n2.next), })) } else { let carry = Some(Box::new(ListNode::new(1))); Some(Box::new(ListNode { val: sum - 10, next: Solution::add_two_numbers( Solution::add_two_numbers(carry, n1.next), n2.next, ), })) } } } } }