Я хочу преобразовать следующий тип Option<Box<ListNode>>
в тип Vec<i32>
:
fn main() {
Some(ListNode {
val: 3,
next: Some(ListNode {
val: 4,
next: Some(ListNode { val: 2, next: None }),
}),
})
}
Я хочу реализовать функцию list_to_vec
:
#[derive(PartialEq, Eq, Clone, Debug)]
pub struct ListNode {
pub val: i32,
pub next: Option<Box<ListNode>>,
}
impl ListNode {
pub fn new(val: i32) -> Self {
ListNode { next: None, val }
}
pub fn vec_to_list(mut value: Vec<i32>) -> Option<Box<ListNode>> {
match value.pop() {
Some(x) => Some(Box::new(ListNode {
val: x,
next: ListNode::vec_to_list(value),
})),
None => None,
}
}
pub fn list_to_vec(mut value: &Option<ListNode>) -> Vec<i32> {
//????????????????????????????
}
}
Требуемый вывод
[3, 4, 2]
Я пробовал:
pub fn list_to_vec(mut value: &Option<ListNode>) -> Vec<i32> {
let mut v = vec![];
match value {
Some(x) => {
&v.push(x.val);
Self::list_to_vec(x.next)
}
None => v,
}
}
let h = ListNode::vec_to_list(vec![2, 4, 3]);
println!("{:#?}", ListNode::list_to_vec(&h));
ошибка:
error[E0308]: mismatched types
--> src\main.rs:27:56
|
27 | Some(x) => {&v.push(x.val);Self::list_to_vec(x.next)},
| ^^^^^^ expected reference, found enum `std::option::Option`
|
= note: expected type `&std::option::Option<ListNode>`
found type `std::option::Option<std::boxed::Box<ListNode>>`
error[E0308]: mismatched types
--> src\main.rs:74:40
|
74 | println!("{:#?}",ListNode::list_to_vec(&h));
| ^^ expected struct `ListNode`, found struct `std::boxed::Box`
|
= note: expected type `&std::option::Option<ListNode>`
found type `&std::option::Option<std::boxed::Box<ListNode>>`