Я новичок в Rust, я просто делаю упражнения. Есть связанный список. Например, 0-> 1-> 2-> 3-> 4 , обрежьте его по индексу 2, затем поменяйте местами оба, а затем составьте их. => 0 <-1 <-2 </strong> 3 <-4 </strong> => 2-> 1-> 0-> 4-> 3
#[derive(debug)]
struct Node{
val: usize,
next: Option<Box<Node>>,
}
impl Node {
fn new(i: usize) -> Node {
...
}
fn reverse_at(self, k: usize) -> Box<Node> {
let mut prev = None;
let mut curr = Box::new(self);
let first_part_tail = &mut curr;
let mut i: usize = 0;
while i <= k {
let next = curr.next.take();
curr.next = prev;
match next {
Some(next_node) => {
prev = Some(curr);
curr = next_node;
}
None => return curr,
}
i += 1;
}
let head = prev.unwrap();
prev = None;
loop {
let next = curr.next.take();
curr.next = prev;
match next {
Some(next_node) => {
prev = Some(curr);
curr = next_node;
}
None => {
first_part_tail.next = Some(curr);
return head;
}
}
}
}
}
Мне нужно получить изменяемый заем первого узла 0 и установить 0 .next = 4 после получения последнего узла 4 в конце функции. Но владелец узла 0 уже передан узлу 1 . Очевидно, что error[E0499]: cannot borrow `curr.next` as mutable more than once at a time
происходит, я не знаю, что делать. Это застряло у меня надолго. Любая помощь, пожалуйста.
play.rust-lang.org /...
&
, я полагаю, что эта функция изменит сам узел. И я не знаю, как изменить собственную ссылку на новый узел, поэтому я использовал self
. Если кто-то может изменить это, это тоже помогает. Возможно, измените эту функцию на
fn reverse_at(&mut self, k:usize){
...
}