簡體   English   中英

Rust自定義鏈接列表pop_back實現

[英]Rust custom link list pop_back implementation

我是 rust 的新手,並嘗試了解 &mut ref 變量和可變性。 我開始使用 pop_back function 創建一個簡單的鏈接列表。

pub fn pop_back(&mut self) -> Option<T> {
        let mut head = &mut self.head;
        while let Some(v) = head {
            if v.next.is_none() {
                break;
            }
            head = &mut v.next;
        }
        head.take().map(|node| node.data)
    }

但不能讓它工作。 錯誤是cannot borrow *head as mutable more than once at a time 如何告訴 rust 我只想更改循環中的引用而不是值? 我不想在我的列表中添加另一個尾變量,所以在不改變結構的情況下我怎樣才能使它工作?

這是結構定義

pub struct Node<T> {
    data: T,
    next: Option<Box<Node<T>>>
}

pub struct SimpleLinkedList<T> {
    head: Option<Box<Node<T>>>,
}

這是借用檢查器的已知限制。 下一代Polonius將解決這個問題。

同時,解決方案(沒有unsafe )是重復計算。 在您的情況下,這意味着一些unwrap() s:

pub fn pop_back(&mut self) -> Option<T> {
    let mut head = &mut self.head;
    while head.is_some() {
        if head.as_mut().unwrap().next.is_none() {
            break;
        }
        head = &mut head.as_mut().unwrap().next;
    }
    head.take().map(|node| node.data)
}

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM