003 通過連結串列學Rust之給連結串列新增函式

linghuyichong發表於2021-06-20

視訊地址:www.bilibili.com/video/av78062009/
相關原始碼:github.com/anonymousGiga/Rust-link...

在上一節,我們基本確定了連結串列的佈局方式,下面我們就來實現連結串列的響應的函式。

對於連結串列來說,最基本的幾個函式就是:

New //new函式為建立連結串列的函式
Push//新增元素的函式
Pop //彈出元素的函式

實現如下:

impl List {
    pub fn new() -> Self {
        List { head: Link::Empty }
    }
}

實現如下:

impl List {
    pub fn push(&mut self, elem: i32) {
        let node = Box::new(Node {
            elem: elem,
            next: mem::replace(&mut self.head, Link::Empty),
        });

        self.head = Link::More(node);
    }
}

和Push函式不一樣,Pop函式需要考慮當連結串列為空時的情況,所以我們考慮Pop函式的返回值使用Option。實現程式碼如下:

impl List {
    pub fn pop(&mut self) -> Option<i32> {
        match mem::replace(&mut self.head, Link::Empty) {
            Link::Empty => None,
            Link::More(node) => {
                self.head = node.next;
                Some(node.elem)    
            }
        }
    }
}

至此,我們把連結串列的幾個基本函式都寫完了!

本作品採用《CC 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章