详解Rust标准库:LinkedList 链表

查看本地官方文档

安装rust后运行

rustup doc

查看The Standard Library即可获取标准库内容

std::collections::LinkedList定义

LinkedList节点定义

struct Node<T> {
    // 下一个节点
    next: Option<NonNull<Node<T>>>,
    // 上一个节点
    prev: Option<NonNull<Node<T>>>,
    // 当前节点值
    element: T,
}

方法

push_backpush_front:在链表尾、头插入元素

use std::collections::LinkedList;
fn main() {
    let mut list1 = LinkedList::new();
    list1.push_back('c');
    list1.push_back('d');
    list1.push_front('b');
    list1.push_front('a');
    println!("list1: {:?}", list1);
    // list1: ['a', 'b', 'c', 'd']
}

append:将另一个LinkedList的所有元素追加到当前链表的末尾

use std::collections::LinkedList;
fn main() {
    let mut list1 = LinkedList::new();
    list1.push_back('a');
    list1.push_back('b');

    let mut list2 = LinkedList::new();
    list2.push_back('c');
    list2.push_back('d');

    list1.append(&mut list2);

    println!("list1: {:?}", list1);
    // list1: ['a', 'b', 'c', 'd']
}

is_empty:判断链表是否为空

use std::collections::LinkedList;
fn main() {
    let list: LinkedList<i32> = LinkedList::new();
    println!("Is list empty? {}", list.is_empty());
    // Is list empty? true

    let mut list2 = LinkedList::new();
    list2.push_back('a');
    println!("Is list2 empty? {}", list2.is_empty());
    // Is list2 empty? false
}

contains:判断链表中是否包含特定元素

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    println!("Does list contain 'a'? {}", list.contains(&'a'));
    // Does list contain 'a'? true
    println!("Does list contain 'c'? {}", list.contains(&'c'));
    // Does list contain 'c'? false
}

front:返回链表头部元素的引用,如果链表为空则返回None

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    if let Some(front) = list.front() {
        println!("Front element: {}", *front);
        // Front element: a
    }
}

front_mut:返回链表头部元素的可变引用,如果链表为空则返回None

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    if let Some(front) = list.front_mut() {
        *front = 'c';
    }

    println!("list: {:?}", list);
    // list: ['c', 'b']
}

back:返回链表尾部元素的引用,如果链表为空则返回None

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    if let Some(back) = list.back() {
        println!("Back element: {}", *back);
        // Back element: b
    }
}

back_mut:返回链表尾部元素的可变引用,如果链表为空则返回None

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    if let Some(back) = list.back_mut() {
        *back = 'c';
    }

    println!("list: {:?}", list);
    // list: ['a', 'c']
}

pop_front:移除并返回链表头部的元素,如果链表为空则返回None

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    if let Some(front) = list.pop_front() {
        println!("Popped element: {}", front);
        // Popped element: a
    }

    println!("list: {:?}", list);
    // list: ['b']
}

pop_back:移除并返回链表尾部的元素,如果链表为空则返回None

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    if let Some(back) = list.pop_back() {
        println!("Popped element: {}", back);
        // Popped element: b
    }

    println!("list: {:?}", list);
    // list: ['a']
}

split_off:在指定位置将链表分割成两个链表,并返回后半部分链表

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');
    list.push_back('c');
    list.push_back('d');

    let split_index = 2;
    let split_list = list.split_off(split_index);

    println!("First list: {:?}", list);
    // First list: ['a', 'b']
    println!("Second list: {:?}", split_list);
    //Second list: ['c', 'd']
}

iter:返回一个不可变的迭代器,用于遍历链表中的元素

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');
    list.push_back('c');

    for element in list.iter() {
        println!("Element: {}", element);
    }
    // Element: a
    // Element: b
    // Element: c
}

iter_mut:返回一个可变的迭代器,允许在遍历过程中修改链表中的元素

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');
    list.push_back('c');

    for element in list.iter_mut() {
        *element = (*element).to_uppercase().next().unwrap();
    }

    println!("Modified list: {:?}", list);
    // Modified list: ['A', 'B', 'C']
}

len:返回链表中元素的数量

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');
    list.push_back('c');

    println!("Length of list: {}", list.len());
    // Length of list: 3
}

clear:清空链表,移除所有元素

use std::collections::LinkedList;

fn main() {
    let mut list = LinkedList::new();
    list.push_back('a');
    list.push_back('b');

    println!("Before clearing: {:?}", list);
    // Before clearing: ['a', 'b']
    list.clear();

    println!("After clearing: {:?}", list);
    // After clearing: []
}

还有一些夜间实验性API见官网:https://doc.rust-lang.org/std/collections/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cci497

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值