From 11d6a651557981f8c58d4cc186848f8e36a53053 Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Sun, 17 Aug 2025 23:04:26 +0800 Subject: [PATCH] feat: add initial implementation of reverse linked list --- 206_reverse_linked_list/Cargo.lock | 7 +++++ 206_reverse_linked_list/Cargo.toml | 6 ++++ 206_reverse_linked_list/src/main.rs | 44 +++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 206_reverse_linked_list/Cargo.lock create mode 100644 206_reverse_linked_list/Cargo.toml create mode 100644 206_reverse_linked_list/src/main.rs diff --git a/206_reverse_linked_list/Cargo.lock b/206_reverse_linked_list/Cargo.lock new file mode 100644 index 0000000..df5d667 --- /dev/null +++ b/206_reverse_linked_list/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "reverse_linked_list" +version = "0.1.0" diff --git a/206_reverse_linked_list/Cargo.toml b/206_reverse_linked_list/Cargo.toml new file mode 100644 index 0000000..5c17a31 --- /dev/null +++ b/206_reverse_linked_list/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "reverse_linked_list" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/206_reverse_linked_list/src/main.rs b/206_reverse_linked_list/src/main.rs new file mode 100644 index 0000000..8561534 --- /dev/null +++ b/206_reverse_linked_list/src/main.rs @@ -0,0 +1,44 @@ +fn main() { + println!("Hello, world!"); +} + +#[derive(PartialEq, Eq, Clone, Debug)] +pub struct ListNode { + pub val: i32, + pub next: Option>, +} + +impl ListNode { + #[inline] + fn new(val: i32) -> Self { + ListNode { next: None, val } + } +} + +struct Solution; + +impl Solution { + pub fn reverse_list(head: Option>) -> Option> { + let mut arr: Vec = vec![]; + let mut current_node = head; + + while current_node != None { + arr.push(current_node.as_ref().unwrap().val); + current_node = current_node.unwrap().next; + } + + if arr.is_empty() { + return None; + } + + let mut head = Some(Box::new(ListNode::new(*arr.last().unwrap()))); + let mut current_node = &mut head; + + for &num in arr[..arr.len() - 1].iter().rev() { + current_node.as_mut().unwrap().next = Some(Box::new(ListNode::new(num))); + current_node = &mut current_node.as_mut().unwrap().next; + } + + head + } +}