介绍
A doubly-linked list with owned nodes.
自有节点的双向链表
pub struct LinkedList<T, A = Global>
whereA: Allocator,
{ /* private fields */ }
使用 Vec 或 VecDeque 几乎总是更好,因为基于数组的容器通常更快、内存效率更高,并且可以更好地利用 CPU 缓存
方法
// 初始化
pub const fn new() -> LinkedList<T, Global>// 追加
pub fn append(&mut self, other: &mut LinkedList<T, Global>)// 前向迭代
pub fn iter(&self) -> Iter<'_, T>
// Provides a forward iterator
pub fn iter_mut(&mut self) -> IterMut<'_, T>
// Provides a forward iterator with mutable references// 是否为空
pub fn is_empty(&self) -> bool// 长度
pub fn len(&self) -> usize// 移除所有元素
pub fn clear(&mut self)// 包含
pub fn contains(&self, x: &T) -> bool// 位置
pub fn front(&self) -> Option<&T>
pub fn front_mut(&mut self) -> Option<&mut T>
pub fn back(&self) -> Option<&T>
pub fn back_mut(&mut self) -> Option<&mut T>
pub fn push_front(&mut self, elt: T)
pub fn pop_front(&mut self) -> Option<T>
pub fn push_back(&mut self, elt: T)
pub fn pop_back(&mut self) -> Option<T>// 拆分
// 在给定索引处将列表分成两部分,返回给定索引之后的所有内容,包括索引
// 将一个链表分割为两个独立的链表。
// 该方法会从指定的位置将原链表拆分成两个链表,并返回新创建的链表
pub fn split_off(&mut self, at: usize) -> LinkedList<T, A>
whereA: Clone,
示例
use std::collections::LinkedList;fn main() {let mut list1 = LinkedList::new();assert!(list1.is_empty());assert_eq!(list1.len(), 0);list1.push_back('a');assert!(!list1.is_empty());assert_eq!(list1.len(), 1);assert_eq!(list1.contains(&'a'), true);assert_eq!(list1.contains(&'b'), false);let mut list2 = LinkedList::new();list2.push_back('b');list2.push_back('c');list1.append(&mut list2);let mut iter = list1.iter();assert_eq!(iter.next(