File tree Expand file tree Collapse file tree
solution/2000-2099/2095.Delete the Middle Node of a Linked List Expand file tree Collapse file tree Original file line number Diff line number Diff 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 -->
Original file line number Diff line number Diff 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 -->
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments