summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/p0002.rs41
-rw-r--r--src/bin/p0021.rs60
-rw-r--r--src/lib.rs1
-rw-r--r--src/list.rs40
4 files changed, 102 insertions, 40 deletions
diff --git a/src/bin/p0002.rs b/src/bin/p0002.rs
index ac028a2..d8acf94 100644
--- a/src/bin/p0002.rs
+++ b/src/bin/p0002.rs
@@ -1,18 +1,4 @@
-#[derive(PartialEq, Eq, Clone, Debug)]
-pub struct ListNode {
- pub val: i32,
- pub next: Option<Box<ListNode>>
-}
-
-impl ListNode {
- #[inline]
- fn new(val: i32) -> Self {
- ListNode {
- next: None,
- val
- }
- }
-}
+use leetcode::list::*;
struct Solution {}
@@ -54,31 +40,6 @@ impl Solution {
}
}
-fn vector2list(vec: Vec<i32>) -> Option<Box<ListNode>> {
- let mut result: Option<Box<ListNode>> = None;
- for i in 0..vec.len() {
- let mut new_result = Some(Box::new(ListNode::new(vec[vec.len() - i - 1])));
- new_result.as_mut().unwrap().next = result;
- result = new_result;
- }
- result
-}
-
-fn list2vector(lst: Option<Box<ListNode>>) -> Vec<i32> {
- let mut result: Vec<i32> = Vec::new();
- let mut cur = &lst;
- loop {
- match cur {
- None => break,
- Some(node) => {
- result.push(node.val);
- cur = &node.next;
- },
- }
- }
- result
-}
-
fn test(l1: Vec<i32>, l2: Vec<i32>) -> Vec<i32> {
list2vector(Solution::add_two_numbers(vector2list(l1), vector2list(l2)))
}
diff --git a/src/bin/p0021.rs b/src/bin/p0021.rs
new file mode 100644
index 0000000..d0ce9e6
--- /dev/null
+++ b/src/bin/p0021.rs
@@ -0,0 +1,60 @@
+use leetcode::list::*;
+
+impl Solution {
+ pub fn merge_two_lists(list1: Option<Box<ListNode>>, list2: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
+ let mut p1 = &list1;
+ let mut p2 = &list2;
+ let mut result: Vec<i32> = vec!();
+ loop {
+ let v1: i32;
+ let v2: i32;
+ match p1 {
+ None => {
+ match p2 {
+ None => break,
+ Some(px) => {
+ result.push(px.val);
+ p2 = &px.next;
+ continue;
+ }
+ }
+ },
+ Some(p1) => { v1 = p1.val; },
+ }
+ match p2 {
+ None => {
+ match p1 {
+ None => break,
+ Some(px) => {
+ result.push(px.val);
+ p1 = &px.next;
+ continue;
+ }
+ }
+ },
+ Some(p2) => { v2 = p2.val; },
+ }
+ if v1 <= v2 {
+ result.push(v1);
+ p1 = match p1 {
+ Some(px) => &px.next,
+ None => p1,
+ };
+ } else {
+ result.push(v2);
+ p2 = match p2 {
+ Some(px) => &px.next,
+ None => p2,
+ };
+ }
+ }
+ vector2list(result)
+ }
+}
+
+struct Solution {}
+fn main() {
+ println!("{:?}", list2vector(
+ Solution::merge_two_lists(vector2list(vec!(1,3,5)),
+ vector2list(vec!(2,4,6)))));
+} \ No newline at end of file
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..651aed7
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1 @@
+pub mod list; \ No newline at end of file
diff --git a/src/list.rs b/src/list.rs
new file mode 100644
index 0000000..d033cfe
--- /dev/null
+++ b/src/list.rs
@@ -0,0 +1,40 @@
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub struct ListNode {
+ pub val: i32,
+ pub next: Option<Box<ListNode>>
+}
+//
+impl ListNode {
+ #[inline]
+ pub fn new(val: i32) -> Self {
+ ListNode {
+ next: None,
+ val
+ }
+ }
+}
+
+pub fn vector2list(vec: Vec<i32>) -> Option<Box<ListNode>> {
+ let mut result: Option<Box<ListNode>> = None;
+ for i in 0..vec.len() {
+ let mut new_result = Some(Box::new(ListNode::new(vec[vec.len() - i - 1])));
+ new_result.as_mut().unwrap().next = result;
+ result = new_result;
+ }
+ result
+}
+
+pub fn list2vector(lst: Option<Box<ListNode>>) -> Vec<i32> {
+ let mut result: Vec<i32> = Vec::new();
+ let mut cur = &lst;
+ loop {
+ match cur {
+ None => break,
+ Some(node) => {
+ result.push(node.val);
+ cur = &node.next;
+ },
+ }
+ }
+ result
+} \ No newline at end of file