Skip to content

Commit 0625393

Browse files
committed
feat: add rust solution to lc problem: No.0002
No.0002.Add Two Numbers
1 parent c6533ae commit 0625393

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed

solution/0000-0099/0002.Add Two Numbers/README.md

+45
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,51 @@ proc addTwoNumbers(l1: var SinglyLinkedList, l2: var SinglyLinkedList): SinglyLi
339339
result = aggregate
340340
```
341341

342+
### **Rust**
343+
344+
```rust
345+
// Definition for singly-linked list.
346+
// #[derive(PartialEq, Eq, Clone, Debug)]
347+
// pub struct ListNode {
348+
// pub val: i32,
349+
// pub next: Option<Box<ListNode>>
350+
// }
351+
//
352+
// impl ListNode {
353+
// #[inline]
354+
// fn new(val: i32) -> Self {
355+
// ListNode {
356+
// next: None,
357+
// val
358+
// }
359+
// }
360+
// }
361+
impl Solution {
362+
pub fn add_two_numbers(
363+
mut l1: Option<Box<ListNode>>,
364+
mut l2: Option<Box<ListNode>>,
365+
) -> Option<Box<ListNode>> {
366+
let mut dummy = Some(Box::new(ListNode::new(0)));
367+
let mut cur = &mut dummy;
368+
let mut sum = 0;
369+
while l1.is_some() || l2.is_some() || sum != 0 {
370+
if let Some(node) = l1 {
371+
sum += node.val;
372+
l1 = node.next;
373+
}
374+
if let Some(node) = l2 {
375+
sum += node.val;
376+
l2 = node.next;
377+
}
378+
cur.as_mut().unwrap().next = Some(Box::new(ListNode::new(sum % 10)));
379+
cur = &mut cur.as_mut().unwrap().next;
380+
sum /= 10;
381+
}
382+
dummy.unwrap().next.take()
383+
}
384+
}
385+
```
386+
342387
### **...**
343388

344389
```

solution/0000-0099/0002.Add Two Numbers/README_EN.md

+45
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,51 @@ proc addTwoNumbers(l1: var SinglyLinkedList, l2: var SinglyLinkedList): SinglyLi
327327
result = aggregate
328328
```
329329

330+
### **Rust**
331+
332+
```rust
333+
// Definition for singly-linked list.
334+
// #[derive(PartialEq, Eq, Clone, Debug)]
335+
// pub struct ListNode {
336+
// pub val: i32,
337+
// pub next: Option<Box<ListNode>>
338+
// }
339+
//
340+
// impl ListNode {
341+
// #[inline]
342+
// fn new(val: i32) -> Self {
343+
// ListNode {
344+
// next: None,
345+
// val
346+
// }
347+
// }
348+
// }
349+
impl Solution {
350+
pub fn add_two_numbers(
351+
mut l1: Option<Box<ListNode>>,
352+
mut l2: Option<Box<ListNode>>,
353+
) -> Option<Box<ListNode>> {
354+
let mut dummy = Some(Box::new(ListNode::new(0)));
355+
let mut cur = &mut dummy;
356+
let mut sum = 0;
357+
while l1.is_some() || l2.is_some() || sum != 0 {
358+
if let Some(node) = l1 {
359+
sum += node.val;
360+
l1 = node.next;
361+
}
362+
if let Some(node) = l2 {
363+
sum += node.val;
364+
l2 = node.next;
365+
}
366+
cur.as_mut().unwrap().next = Some(Box::new(ListNode::new(sum % 10)));
367+
cur = &mut cur.as_mut().unwrap().next;
368+
sum /= 10;
369+
}
370+
dummy.unwrap().next.take()
371+
}
372+
}
373+
```
374+
330375
### **...**
331376

332377
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Definition for singly-linked list.
2+
// #[derive(PartialEq, Eq, Clone, Debug)]
3+
// pub struct ListNode {
4+
// pub val: i32,
5+
// pub next: Option<Box<ListNode>>
6+
// }
7+
//
8+
// impl ListNode {
9+
// #[inline]
10+
// fn new(val: i32) -> Self {
11+
// ListNode {
12+
// next: None,
13+
// val
14+
// }
15+
// }
16+
// }
17+
impl Solution {
18+
pub fn add_two_numbers(
19+
mut l1: Option<Box<ListNode>>,
20+
mut l2: Option<Box<ListNode>>,
21+
) -> Option<Box<ListNode>> {
22+
let mut dummy = Some(Box::new(ListNode::new(0)));
23+
let mut cur = &mut dummy;
24+
let mut sum = 0;
25+
while l1.is_some() || l2.is_some() || sum != 0 {
26+
if let Some(node) = l1 {
27+
sum += node.val;
28+
l1 = node.next;
29+
}
30+
if let Some(node) = l2 {
31+
sum += node.val;
32+
l2 = node.next;
33+
}
34+
cur.as_mut().unwrap().next = Some(Box::new(ListNode::new(sum % 10)));
35+
cur = &mut cur.as_mut().unwrap().next;
36+
sum /= 10;
37+
}
38+
dummy.unwrap().next.take()
39+
}
40+
}

0 commit comments

Comments
 (0)