Я работаю над проблемой кода leetcode # 83 «Удаление дубликатов из отсортированного списка», но я застрял в этой проблеме проверки заимствования.
Структура ListNode задается проблемой, поэтому ее нельзя изменить.Я попытался реструктурировать цикл и оператор if, но я не нашел работающего решения.
Что я пытаюсь сделать:
// Definition for singly-linked list.
#[derive(PartialEq, Eq, Debug)]
pub struct ListNode {
pub val: i32,
pub next: Option<Box<ListNode>>,
}
impl ListNode {
#[inline]
fn new(val: i32) -> Self {
ListNode { next: None, val }
}
}
fn remove_duplicates(mut list: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
let mut cursor = &mut list;
while let Some(c) = cursor.as_mut() {
if let Some(next) = c.next.as_mut() {
if next.val == c.val {
c.next = next.next.take();
continue;
}
}
cursor = &mut c.next;
}
list
}
Ошибка, которую я получаю:
error[E0499]: cannot borrow `*cursor` as mutable more than once at a time
--> src/lib.rs:17:25
|
17 | while let Some(c) = cursor.as_mut() {
| ^^^^^^ mutable borrow starts here in previous iteration of loop
Упрощенный код, который, кажется, показывает ту же ошибку:
fn remove_duplicates(mut list: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
let mut cursor = &mut list;
while let Some(c) = cursor.as_mut() {
if c.val > 0 {
cursor = &mut c.next;
}
}
list
}
Я не понимаю, почему изменяемый заем не был отброшен до следующей итерации цикла.Похоже, это вызвано условным изменением курсора, но я не понимаю, почему это помешало бы сбросу заимствования.