Skip to content

Commit 8d9766a

Browse files
authored
feat: add rust solution to lc problem: No.2095 (#5258)
1 parent ca7fd88 commit 8d9766a

3 files changed

Lines changed: 136 additions & 0 deletions

File tree

solution/2000-2099/2095.Delete the Middle Node of a Linked List/README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,53 @@ function deleteMiddle(head: ListNode | null): ListNode | null {
214214
}
215215
```
216216

217+
#### Rust
218+
219+
```rust
220+
// Definition for singly-linked list.
221+
// #[derive(PartialEq, Eq, Clone, Debug)]
222+
// pub struct ListNode {
223+
// pub val: i32,
224+
// pub next: Option<Box<ListNode>>
225+
// }
226+
//
227+
// impl ListNode {
228+
// #[inline]
229+
// fn new(val: i32) -> Self {
230+
// ListNode {
231+
// next: None,
232+
// val
233+
// }
234+
// }
235+
// }
236+
impl Solution {
237+
pub fn delete_middle(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
238+
let mut slow = 0;
239+
let mut fast = head.as_ref();
240+
241+
while let Some(node) = fast {
242+
if node.next.is_none() {
243+
break;
244+
}
245+
slow += 1;
246+
fast = node.next.as_ref().unwrap().next.as_ref();
247+
}
248+
249+
let mut dummy = Some(Box::new(ListNode { val: 0, next: head }));
250+
let mut cur = dummy.as_mut();
251+
252+
for _ in 0..slow {
253+
cur = cur.unwrap().next.as_mut();
254+
}
255+
256+
let node = cur.unwrap();
257+
node.next = node.next.as_mut().unwrap().next.take();
258+
259+
dummy.unwrap().next
260+
}
261+
}
262+
```
263+
217264
<!-- tabs:end -->
218265

219266
<!-- solution:end -->

solution/2000-2099/2095.Delete the Middle Node of a Linked List/README_EN.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,53 @@ function deleteMiddle(head: ListNode | null): ListNode | null {
206206
}
207207
```
208208

209+
#### Rust
210+
211+
```rust
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 delete_middle(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
230+
let mut slow = 0;
231+
let mut fast = head.as_ref();
232+
233+
while let Some(node) = fast {
234+
if node.next.is_none() {
235+
break;
236+
}
237+
slow += 1;
238+
fast = node.next.as_ref().unwrap().next.as_ref();
239+
}
240+
241+
let mut dummy = Some(Box::new(ListNode { val: 0, next: head }));
242+
let mut cur = dummy.as_mut();
243+
244+
for _ in 0..slow {
245+
cur = cur.unwrap().next.as_mut();
246+
}
247+
248+
let node = cur.unwrap();
249+
node.next = node.next.as_mut().unwrap().next.take();
250+
251+
dummy.unwrap().next
252+
}
253+
}
254+
```
255+
209256
<!-- tabs:end -->
210257

211258
<!-- solution:end -->
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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 delete_middle(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
19+
let mut slow = 0;
20+
let mut fast = head.as_ref();
21+
22+
while let Some(node) = fast {
23+
if node.next.is_none() {
24+
break;
25+
}
26+
slow += 1;
27+
fast = node.next.as_ref().unwrap().next.as_ref();
28+
}
29+
30+
let mut dummy = Some(Box::new(ListNode { val: 0, next: head }));
31+
let mut cur = dummy.as_mut();
32+
33+
for _ in 0..slow {
34+
cur = cur.unwrap().next.as_mut();
35+
}
36+
37+
let node = cur.unwrap();
38+
node.next = node.next.as_mut().unwrap().next.take();
39+
40+
dummy.unwrap().next
41+
}
42+
}

0 commit comments

Comments
 (0)