From 5b09840a8f80222085b6a0425f83286b74347d60 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Fri, 19 Jul 2024 14:37:48 +0100 Subject: [PATCH] 21 - Merge Two Sorted Lists --- src/solutions/merge_sorted_lists.rs | 13 +++++++------ src/utils/linked_list.rs | 10 ++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/solutions/merge_sorted_lists.rs b/src/solutions/merge_sorted_lists.rs index 44aa324..04cbb47 100644 --- a/src/solutions/merge_sorted_lists.rs +++ b/src/solutions/merge_sorted_lists.rs @@ -9,7 +9,8 @@ impl Solution for MergeSortedLists { input: &mut Vec, ) -> Result, Box> { let lists = parse_input(input.first().unwrap()); - Ok(Box::new(self.merge_two_lists(lists.0, lists.1))) + let merged_list = self.merge_two_lists(lists.0, lists.1); + Ok(Box::new(format!("{:?}", ListNode::to_vec(merged_list)).replace(" ", ""))) } fn get_id(&self) -> u32 { @@ -42,12 +43,12 @@ impl MergeSortedLists { } fn parse_input(input: &str) -> (Option>, Option>) { - let parts: Vec<&str> = input.split(",").collect(); - let list1_str = parts[0].split('=').nth(1).unwrap().trim(); - let list2_str = parts[1].split('=').nth(1).unwrap().trim(); + let parts: Vec<&str> = input.split("],").collect(); + let list1_str = parts[0].split('=').nth(1).unwrap().trim().to_string() + "]"; + let list2_str = parts[1].split('=').nth(1).unwrap().trim().to_string() + "]"; - let list1 = ListNode::from_vec(ListNode::parse_list(list1_str)); - let list2 = ListNode::from_vec(ListNode::parse_list(list2_str)); + let list1 = ListNode::from_vec(ListNode::parse_list(&list1_str)); + let list2 = ListNode::from_vec(ListNode::parse_list(&list2_str)); (list1, list2) } diff --git a/src/utils/linked_list.rs b/src/utils/linked_list.rs index b87f502..8bf12a6 100644 --- a/src/utils/linked_list.rs +++ b/src/utils/linked_list.rs @@ -24,6 +24,16 @@ impl ListNode { current } + pub fn to_vec(node: Option>) -> Vec { + let mut vec = Vec::new(); + let mut current = node; + while let Some(n) = current { + vec.push(n.val); + current = n.next; + } + vec + } + pub fn parse_list(s: &str) -> Vec { s.trim_matches(|c| c == '[' || c == ']') .split(',')