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 + } +}