diff --git a/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README.md b/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README.md index 61f89aca653e4..d0dd670387d97 100644 --- a/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README.md +++ b/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README.md @@ -227,6 +227,52 @@ function removeZeroSumSublists(head: ListNode | null): ListNode | null { } ``` +### **Rust** + +``` +// Definition for singly-linked list. +// #[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 +// } +// } +// } +impl Solution { + pub fn remove_zero_sum_sublists(head: Option>) -> Option> { + let dummy = Some(Box::new(ListNode { val: 0, next: head })); + let mut last = std::collections::HashMap::new(); + let mut s = 0; + let mut p = dummy.as_ref(); + while let Some(node) = p { + s += node.val; + last.insert(s, node); + p = node.next.as_ref(); + } + + let mut dummy = Some(Box::new(ListNode::new(0))); + let mut q = dummy.as_mut(); + s = 0; + while let Some(cur) = q { + s += cur.val; + if let Some(node) = last.get(&s) { + cur.next = node.next.clone(); + } + q = cur.next.as_mut(); + } + dummy.unwrap().next + } +} +``` + ### **...** ``` diff --git a/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README_EN.md b/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README_EN.md index dd1119ed6092a..ea59c2b19014d 100644 --- a/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README_EN.md +++ b/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README_EN.md @@ -206,6 +206,52 @@ function removeZeroSumSublists(head: ListNode | null): ListNode | null { } ``` +### **Rust** + +``` +// Definition for singly-linked list. +// #[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 +// } +// } +// } +impl Solution { + pub fn remove_zero_sum_sublists(head: Option>) -> Option> { + let dummy = Some(Box::new(ListNode { val: 0, next: head })); + let mut last = std::collections::HashMap::new(); + let mut s = 0; + let mut p = dummy.as_ref(); + while let Some(node) = p { + s += node.val; + last.insert(s, node); + p = node.next.as_ref(); + } + + let mut dummy = Some(Box::new(ListNode::new(0))); + let mut q = dummy.as_mut(); + s = 0; + while let Some(cur) = q { + s += cur.val; + if let Some(node) = last.get(&s) { + cur.next = node.next.clone(); + } + q = cur.next.as_mut(); + } + dummy.unwrap().next + } +} +``` + ### **...** ``` diff --git a/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/Solution.rs b/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/Solution.rs new file mode 100644 index 0000000000000..72064680824e9 --- /dev/null +++ b/solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/Solution.rs @@ -0,0 +1,41 @@ +// Definition for singly-linked list. +// #[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 +// } +// } +// } +impl Solution { + pub fn remove_zero_sum_sublists(head: Option>) -> Option> { + let dummy = Some(Box::new(ListNode { val: 0, next: head })); + let mut last = std::collections::HashMap::new(); + let mut s = 0; + let mut p = dummy.as_ref(); + while let Some(node) = p { + s += node.val; + last.insert(s, node); + p = node.next.as_ref(); + } + + let mut dummy = Some(Box::new(ListNode::new(0))); + let mut q = dummy.as_mut(); + s = 0; + while let Some(cur) = q { + s += cur.val; + if let Some(node) = last.get(&s) { + cur.next = node.next.clone(); + } + q = cur.next.as_mut(); + } + dummy.unwrap().next + } +}