查看本地官方文档
安装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_back
、push_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