2. Add Two Numbers
兩個LinkedList 做從個位數開始的大數加法
思路:
以下都不是重點 重點是Rust操作指標真的很繁瑣
從dummy_head的下一位開始存結果
while以此node當基準跑
每次先加上同index的l1跟l2的value
(已經沒node的就不加)
有value可以加的話
加完l1 l2分別進next node
然後計算是否進位 建立並進入下一個結果node
Code:
impl Solution {
pub fn add_two_numbers(
mut l1: Option<Box<ListNode>>,
mut l2: Option<Box<ListNode>>,
) -> Option<Box<ListNode>> {
let mut dummy_head = Box::new(ListNode::new(0));
let mut cur = &mut dummy_head;
let mut carry = 0;
while l1.is_some() || l2.is_some() || carry != 0 {
let mut sum = carry
+ match l1 {
Some(node) => {
l1 = node.next;
node.val
}
None => 0,
}
+ match l2 {
Some(node) => {
l2 = node.next;
node.val
}
None => 0,
};
carry = sum / 10;
cur.next = Some(Box::new(ListNode::new(sum % 10)));
cur = cur.next.as_mut().unwrap();
}
dummy_head.next
}
}