diff options
| author | Orangerot <purple@orangerot.dev> | 2024-06-27 11:30:16 +0200 | 
|---|---|---|
| committer | Orangerot <purple@orangerot.dev> | 2024-06-27 11:30:16 +0200 | 
| commit | 4b0a6a01b051a4ebfbc17661d14cb23fe4f275fb (patch) | |
| tree | 0072cca328fe5adb2ed61004010228ff85e2164d /reverse-linked-list-ii/src | |
Diffstat (limited to 'reverse-linked-list-ii/src')
| -rw-r--r-- | reverse-linked-list-ii/src/main.rs | 59 | 
1 files changed, 59 insertions, 0 deletions
diff --git a/reverse-linked-list-ii/src/main.rs b/reverse-linked-list-ii/src/main.rs new file mode 100644 index 0000000..20790aa --- /dev/null +++ b/reverse-linked-list-ii/src/main.rs @@ -0,0 +1,59 @@ +fn main() { +    let tests = [ +        (vec![1,2,3,4,5], 2, 4, vec![1,4,3,2,5]), +        (vec![5], 1, 1, vec![5]) +    ]; + +    for test in tests { +        let a = ListNode::new_from_vec(test.0.clone()); +        println!("{:?} is {:?} should be {:?}", test.0, Solution::reverse_between(a, test.1, test.2).unwrap().to_vec(), test.3); +    } + +} + +#[derive(PartialEq, Eq, Clone, Debug)] +pub struct ListNode { +    pub val: i32, +    pub next: Option<Box<ListNode>> +} + +impl ListNode { +    #[inline] +    fn new(val: i32) -> Self { +        ListNode { +            next: None, +            val +        } +    } +} + +impl ListNode { +    fn new_from_vec(val: Vec<i32>) -> Option<Box<Self>> { +        let mut first = ListNode::new(val[0]); +        if val.len() > 1 { +            let slice = &val[1..val.len()]; +            first.next = Self::new_from_vec(slice.to_vec()); +        } +        Some(Box::new(first)) +    } +    pub fn to_vec(&self) -> Vec<i32> { +        let mut v = Vec::new(); + +        let mut a = Some(Box::new(self.to_owned())); +        while a.is_some() { +            let t = a.unwrap(); +            v.push(t.val); +            a = t.next; +        } +        v +    } +} +struct Solution {} +impl Solution { +    pub fn reverse_between(head: Option<Box<ListNode>>, left: i32, right: i32) -> Option<Box<ListNode>> { +        let v = &mut head.unwrap().to_vec(); +        v[((left-1) as usize)..(right as usize)].reverse(); + +        ListNode::new_from_vec( v.to_vec() ) +    } +}  | 
