I want to implement a LinkedList . In append()
method, I want to find the last node and change its next
property. I have tried to resolve the problem but failed.
The error is
error[E0506]: cannot assign to `node.next` because it is borrowed
--> src/linked_list.rs:35:9
|
28 | let next = &mut node.next;
| -------------- borrow of `node.next` occurs here
...
35 | node.next = Some(Box::new(new_node));
| ^^^^^^^^^
| |
| assignment to borrowed `node.next` occurs here
| borrow later used here
And the code is following:
struct Node {
value: u32,
next: Option<Box<Node>>,
}
impl Node {
fn new(val: u32) -> Self {
return Node {
value: val,
next: None,
};
}
}
struct LinkedList {
len: u32,
head: Box<Node>,
}
impl LinkedList {
fn new() -> Self {
LinkedList {
head: Box::new(Node::new(0)),
len: 0,
}
}
fn append(&mut self, new_node: Node) {
let mut node = &mut self.head;
loop {
let next = &mut node.next;
if let Some(real_next) = next {
node = real_next;
} else {
break;
};
}
node.next = Some(Box::new(new_node));
self.len += 1;
}
}
fn main() {}