Skip to content

Commit 51909a9

Browse files
authored
feat: add rust solution to lc problem: No.1171 (doocs#1832)
1 parent bb69b7d commit 51909a9

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README.md

+46
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,52 @@ function removeZeroSumSublists(head: ListNode | null): ListNode | null {
227227
}
228228
```
229229

230+
### **Rust**
231+
232+
```
233+
// Definition for singly-linked list.
234+
// #[derive(PartialEq, Eq, Clone, Debug)]
235+
// pub struct ListNode {
236+
// pub val: i32,
237+
// pub next: Option<Box<ListNode>>
238+
// }
239+
//
240+
// impl ListNode {
241+
// #[inline]
242+
// fn new(val: i32) -> Self {
243+
// ListNode {
244+
// next: None,
245+
// val
246+
// }
247+
// }
248+
// }
249+
impl Solution {
250+
pub fn remove_zero_sum_sublists(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
251+
let dummy = Some(Box::new(ListNode { val: 0, next: head }));
252+
let mut last = std::collections::HashMap::new();
253+
let mut s = 0;
254+
let mut p = dummy.as_ref();
255+
while let Some(node) = p {
256+
s += node.val;
257+
last.insert(s, node);
258+
p = node.next.as_ref();
259+
}
260+
261+
let mut dummy = Some(Box::new(ListNode::new(0)));
262+
let mut q = dummy.as_mut();
263+
s = 0;
264+
while let Some(cur) = q {
265+
s += cur.val;
266+
if let Some(node) = last.get(&s) {
267+
cur.next = node.next.clone();
268+
}
269+
q = cur.next.as_mut();
270+
}
271+
dummy.unwrap().next
272+
}
273+
}
274+
```
275+
230276
### **...**
231277

232278
```

solution/1100-1199/1171.Remove Zero Sum Consecutive Nodes from Linked List/README_EN.md

+46
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,52 @@ function removeZeroSumSublists(head: ListNode | null): ListNode | null {
206206
}
207207
```
208208

209+
### **Rust**
210+
211+
```
212+
// Definition for singly-linked list.
213+
// #[derive(PartialEq, Eq, Clone, Debug)]
214+
// pub struct ListNode {
215+
// pub val: i32,
216+
// pub next: Option<Box<ListNode>>
217+
// }
218+
//
219+
// impl ListNode {
220+
// #[inline]
221+
// fn new(val: i32) -> Self {
222+
// ListNode {
223+
// next: None,
224+
// val
225+
// }
226+
// }
227+
// }
228+
impl Solution {
229+
pub fn remove_zero_sum_sublists(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
230+
let dummy = Some(Box::new(ListNode { val: 0, next: head }));
231+
let mut last = std::collections::HashMap::new();
232+
let mut s = 0;
233+
let mut p = dummy.as_ref();
234+
while let Some(node) = p {
235+
s += node.val;
236+
last.insert(s, node);
237+
p = node.next.as_ref();
238+
}
239+
240+
let mut dummy = Some(Box::new(ListNode::new(0)));
241+
let mut q = dummy.as_mut();
242+
s = 0;
243+
while let Some(cur) = q {
244+
s += cur.val;
245+
if let Some(node) = last.get(&s) {
246+
cur.next = node.next.clone();
247+
}
248+
q = cur.next.as_mut();
249+
}
250+
dummy.unwrap().next
251+
}
252+
}
253+
```
254+
209255
### **...**
210256

211257
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Definition for singly-linked list.
2+
// #[derive(PartialEq, Eq, Clone, Debug)]
3+
// pub struct ListNode {
4+
// pub val: i32,
5+
// pub next: Option<Box<ListNode>>
6+
// }
7+
//
8+
// impl ListNode {
9+
// #[inline]
10+
// fn new(val: i32) -> Self {
11+
// ListNode {
12+
// next: None,
13+
// val
14+
// }
15+
// }
16+
// }
17+
impl Solution {
18+
pub fn remove_zero_sum_sublists(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
19+
let dummy = Some(Box::new(ListNode { val: 0, next: head }));
20+
let mut last = std::collections::HashMap::new();
21+
let mut s = 0;
22+
let mut p = dummy.as_ref();
23+
while let Some(node) = p {
24+
s += node.val;
25+
last.insert(s, node);
26+
p = node.next.as_ref();
27+
}
28+
29+
let mut dummy = Some(Box::new(ListNode::new(0)));
30+
let mut q = dummy.as_mut();
31+
s = 0;
32+
while let Some(cur) = q {
33+
s += cur.val;
34+
if let Some(node) = last.get(&s) {
35+
cur.next = node.next.clone();
36+
}
37+
q = cur.next.as_mut();
38+
}
39+
dummy.unwrap().next
40+
}
41+
}

0 commit comments

Comments
 (0)