summaryrefslogtreecommitdiff
path: root/rust/src/bin/p0002.rs
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-09-01 21:27:04 +0800
committerMistivia <i@mistivia.com>2025-09-01 21:27:04 +0800
commit6e4397623758ad5417a6b30858cefc223d51d282 (patch)
tree4ac04fa1dcd24659bd2619fa64b896e2f1962b30 /rust/src/bin/p0002.rs
parentfff78815bae72051159a4a4ae5da34bea027317c (diff)
move
Diffstat (limited to 'rust/src/bin/p0002.rs')
-rw-r--r--rust/src/bin/p0002.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/rust/src/bin/p0002.rs b/rust/src/bin/p0002.rs
new file mode 100644
index 0000000..d8acf94
--- /dev/null
+++ b/rust/src/bin/p0002.rs
@@ -0,0 +1,49 @@
+use leetcode::list::*;
+
+struct Solution {}
+
+impl Solution {
+ pub fn add_two_numbers(l1: Option<Box<ListNode>>, l2: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
+ let mut result: Option<Box<ListNode>> = None;
+ let mut cur1 = &l1;
+ let mut cur2 = &l2;
+ let mut carry: i32 = 0;
+ {
+ let mut cur_res = &mut result;
+ loop {
+ if *cur1 == None && *cur2 == None && carry == 0 {
+ break;
+ } else {
+ let n1 = match cur1 {
+ Some(node) => {
+ cur1 = &cur1.as_ref().unwrap().next;
+ node.val
+ },
+ None => 0
+ };
+ let n2 = match cur2 {
+ Some(node) => {
+ cur2 = &cur2.as_ref().unwrap().next;
+ node.val
+ },
+ None => 0
+ };
+ let n = (n1 + n2 + carry) % 10;
+ carry = if (n1 + n2 + carry) >= 10 { 1 } else { 0 };
+ *cur_res = Some(Box::new(ListNode::new(n)));
+ cur_res = &mut cur_res.as_mut().unwrap().next;
+ continue;
+ }
+ }
+ }
+ result
+ }
+}
+
+fn test(l1: Vec<i32>, l2: Vec<i32>) -> Vec<i32> {
+ list2vector(Solution::add_two_numbers(vector2list(l1), vector2list(l2)))
+}
+
+fn main() {
+ println!("{:?}", test(vec![1,2,3], vec![4,5,6]));
+}