summaryrefslogtreecommitdiff
path: root/src/list.rs
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-08-22 16:43:08 +0800
committerMistivia <i@mistivia.com>2025-08-22 16:43:48 +0800
commite8e70c2cf57ab9e1a1d13a3bd53ffb761fef7779 (patch)
tree8a3cdc3bbcae1652903ad5b9fbe3f2219b8ee151 /src/list.rs
parente575d56b149092c6a742aa3f90fe98b52e022f3e (diff)
solve 21
Diffstat (limited to 'src/list.rs')
-rw-r--r--src/list.rs40
1 files changed, 40 insertions, 0 deletions
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