aboutsummaryrefslogtreecommitdiff
path: root/middle_linked_list.rs
blob: ed844098df6fa9730594a43aac9fd7f1beecda8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#[derive(PartialEq, Eq, Clone, Debug)]
struct Solution;
pub struct ListNode {
    pub val: i32,
    pub next: Option<Box<ListNode>>
}

impl ListNode {
    #[inline]
    fn new(val: i32) -> Self {
        ListNode {
            next: None,
            val
        }
    }
}

impl Solution {
    pub fn middle_node(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
        let mut curr = &head;
        let mut node_vec: Vec<Option<Box<ListNode>>> = vec![];
        while let Some(node) = curr.as_ref() {
            node_vec.push(Some(node.clone()));
            curr = &curr.as_ref().unwrap().next;
        }
        node_vec[node_vec.len() / 2].clone()
    }
}