Struct LinkedList
struct LinkedList<T, A: Allocator = crate::alloc::Global> { ... }
A doubly-linked list with owned nodes.
The LinkedList allows pushing and popping elements at either end
in constant time.
A LinkedList with a known list of items can be initialized from an array:
use LinkedList;
let list = from;
NOTE: It is almost always better to use Vec or VecDeque because
array-based containers are generally faster,
more memory efficient, and make better use of CPU cache.
Implementations
impl<T> LinkedList<T>
const fn new() -> SelfCreates an empty
LinkedList.Examples
use LinkedList; let list: = new;fn append(self: &mut Self, other: &mut Self)Moves all elements from
otherto the end of the list.This reuses all the nodes from
otherand moves them intoself. After this operation,otherbecomes empty.This operation should compute in O(1) time and O(1) memory.
Examples
use LinkedList; let mut list1 = new; list1.push_back; let mut list2 = new; list2.push_back; list2.push_back; list1.append; let mut iter = list1.iter; assert_eq!; assert_eq!; assert_eq!; assert!; assert!;
impl<T, A: Allocator> LinkedList<T, A>
const fn new_in(alloc: A) -> SelfConstructs an empty
LinkedList<T, A>.Examples
use System; use LinkedList; let list: = new_in;fn iter(self: &Self) -> Iter<'_, T>Provides a forward iterator.
Examples
use LinkedList; let mut list: = new; list.push_back; list.push_back; list.push_back; let mut iter = list.iter; assert_eq!; assert_eq!; assert_eq!; assert_eq!;fn iter_mut(self: &mut Self) -> IterMut<'_, T>Provides a forward iterator with mutable references.
Examples
use LinkedList; let mut list: = new; list.push_back; list.push_back; list.push_back; for element in list.iter_mut let mut iter = list.iter; assert_eq!; assert_eq!; assert_eq!; assert_eq!;fn cursor_front(self: &Self) -> Cursor<'_, T, A>Provides a cursor at the front element.
The cursor is pointing to the "ghost" non-element if the list is empty.
fn cursor_front_mut(self: &mut Self) -> CursorMut<'_, T, A>Provides a cursor with editing operations at the front element.
The cursor is pointing to the "ghost" non-element if the list is empty.
fn cursor_back(self: &Self) -> Cursor<'_, T, A>Provides a cursor at the back element.
The cursor is pointing to the "ghost" non-element if the list is empty.
fn cursor_back_mut(self: &mut Self) -> CursorMut<'_, T, A>Provides a cursor with editing operations at the back element.
The cursor is pointing to the "ghost" non-element if the list is empty.
fn is_empty(self: &Self) -> boolReturns
trueif theLinkedListis empty.This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = new; assert!; dl.push_front; assert!;fn len(self: &Self) -> usizeReturns the length of the
LinkedList.This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = new; dl.push_front; assert_eq!; dl.push_front; assert_eq!; dl.push_back; assert_eq!;fn clear(self: &mut Self)Removes all elements from the
LinkedList.This operation should compute in O(n) time.
Examples
use LinkedList; let mut dl = new; dl.push_front; dl.push_front; assert_eq!; assert_eq!; dl.clear; assert_eq!; assert_eq!;fn contains(self: &Self, x: &T) -> bool where T: PartialEq<T>Returns
trueif theLinkedListcontains an element equal to the given value.This operation should compute linearly in O(n) time.
Examples
use LinkedList; let mut list: = new; list.push_back; list.push_back; list.push_back; assert_eq!; assert_eq!;fn front(self: &Self) -> Option<&T>Provides a reference to the front element, or
Noneif the list is empty.This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = new; assert_eq!; dl.push_front; assert_eq!;fn front_mut(self: &mut Self) -> Option<&mut T>Provides a mutable reference to the front element, or
Noneif the list is empty.This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = new; assert_eq!; dl.push_front; assert_eq!; match dl.front_mut assert_eq!;fn back(self: &Self) -> Option<&T>Provides a reference to the back element, or
Noneif the list is empty.This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = new; assert_eq!; dl.push_back; assert_eq!;fn back_mut(self: &mut Self) -> Option<&mut T>Provides a mutable reference to the back element, or
Noneif the list is empty.This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = new; assert_eq!; dl.push_back; assert_eq!; match dl.back_mut assert_eq!;fn push_front(self: &mut Self, elt: T)Adds an element to the front of the list.
This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = new; dl.push_front; assert_eq!; dl.push_front; assert_eq!;fn push_front_mut(self: &mut Self, elt: T) -> &mut TAdds an element to the front of the list, returning a reference to it.
This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = from; let ptr = dl.push_front_mut; *ptr += 4; assert_eq!;fn pop_front(self: &mut Self) -> Option<T>Removes the first element and returns it, or
Noneif the list is empty.This operation should compute in O(1) time.
Examples
use LinkedList; let mut d = new; assert_eq!; d.push_front; d.push_front; assert_eq!; assert_eq!; assert_eq!;fn push_back(self: &mut Self, elt: T)Adds an element to the back of the list.
This operation should compute in O(1) time.
Examples
use LinkedList; let mut d = new; d.push_back; d.push_back; assert_eq!;fn push_back_mut(self: &mut Self, elt: T) -> &mut TAdds an element to the back of the list, returning a reference to it.
This operation should compute in O(1) time.
Examples
use LinkedList; let mut dl = from; let ptr = dl.push_back_mut; *ptr += 4; assert_eq!;fn pop_back(self: &mut Self) -> Option<T>Removes the last element from a list and returns it, or
Noneif it is empty.This operation should compute in O(1) time.
Examples
use LinkedList; let mut d = new; assert_eq!; d.push_back; d.push_back; assert_eq!;fn split_off(self: &mut Self, at: usize) -> LinkedList<T, A> where A: CloneSplits the list into two at the given index. Returns everything after the given index, including the index.
This operation should compute in O(n) time.
Panics
Panics if
at > len.Examples
use LinkedList; let mut d = new; d.push_front; d.push_front; d.push_front; let mut split = d.split_off; assert_eq!; assert_eq!;fn remove(self: &mut Self, at: usize) -> TRemoves the element at the given index and returns it.
This operation should compute in O(n) time.
Panics
Panics if at >= len
Examples
use LinkedList; let mut d = new; d.push_front; d.push_front; d.push_front; assert_eq!; assert_eq!; assert_eq!;fn retain<F>(self: &mut Self, f: F) where F: FnMut(&mut T) -> boolRetains only the elements specified by the predicate.
In other words, remove all elements
efor whichf(&mut e)returns false. This method operates in place, visiting each element exactly once in the original order, and preserves the order of the retained elements.Examples
use LinkedList; let mut d = new; d.push_front; d.push_front; d.push_front; d.retain; assert_eq!; assert_eq!;Because the elements are visited exactly once in the original order, external state may be used to decide which elements to keep.
use LinkedList; let mut d = new; d.push_front; d.push_front; d.push_front; let keep = ; let mut iter = keep.iter; d.retain; assert_eq!; assert_eq!;fn extract_if<F>(self: &mut Self, filter: F) -> ExtractIf<'_, T, F, A> where F: FnMut(&mut T) -> boolCreates an iterator which uses a closure to determine if an element should be removed.
If the closure returns
true, the element is removed from the list and yielded. If the closure returnsfalse, or panics, the element remains in the list and will not be yielded.If the returned
ExtractIfis not exhausted, e.g. because it is dropped without iterating or the iteration short-circuits, then the remaining elements will be retained. Useextract_if().for_each(drop)if you do not need the returned iterator.The iterator also lets you mutate the value of each element in the closure, regardless of whether you choose to keep or remove it.
Examples
Splitting a list into even and odd values, reusing the original list:
use LinkedList; let mut numbers: = new; numbers.extend; let evens = numbers.extract_if.; let odds = numbers; assert_eq!; assert_eq!;
impl<'a, T: 'a + Copy, A: Allocator> Extend for LinkedList<T, A>
fn extend<I: IntoIterator<Item = &'a T>>(self: &mut Self, iter: I)fn extend_one(self: &mut Self, elem: &'a T)
impl<T> Any for LinkedList<T, A>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for LinkedList<T, A>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for LinkedList<T, A>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for LinkedList<T, A>
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> Default for LinkedList<T>
fn default() -> SelfCreates an empty
LinkedList<T>.
impl<T> From for LinkedList<T, A>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> FromIterator for LinkedList<T>
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
impl<T> ToOwned for LinkedList<T, A>
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, A> Freeze for LinkedList<T, A>
impl<T, A> RefUnwindSafe for LinkedList<T, A>
impl<T, A> Unpin for LinkedList<T, A>
impl<T, A> UnwindSafe for LinkedList<T, A>
impl<T, A: Allocator> Drop for LinkedList<T, A>
fn drop(self: &mut Self)
impl<T, A: Allocator> Extend for LinkedList<T, A>
fn extend<I: IntoIterator<Item = T>>(self: &mut Self, iter: I)fn extend_one(self: &mut Self, elem: T)
impl<T, A: Allocator> IntoIterator for LinkedList<T, A>
fn into_iter(self: Self) -> IntoIter<T, A>Consumes the list into an iterator yielding elements by value.
impl<T, N: usize> From for LinkedList<T>
fn from(arr: [T; N]) -> SelfConverts a
[T; N]into aLinkedList<T>.use LinkedList; let list1 = from; let list2: = .into; assert_eq!;
impl<T, U> Into for LinkedList<T, A>
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for LinkedList<T, A>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for LinkedList<T, A>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>
impl<T: Clone, A: Allocator + Clone> Clone for LinkedList<T, A>
fn clone(self: &Self) -> Selffn clone_from(self: &mut Self, source: &Self)Overwrites the contents of
selfwith a clone of the contents ofsource.This method is preferred over simply assigning
source.clone()toself, as it avoids reallocation of the nodes of the linked list. Additionally, if the element typeToverridesclone_from(), this will reuse the resources ofself's elements as well.
impl<T: Eq, A: Allocator> Eq for LinkedList<T, A>
impl<T: Hash, A: Allocator> Hash for LinkedList<T, A>
fn hash<H: Hasher>(self: &Self, state: &mut H)
impl<T: Ord, A: Allocator> Ord for LinkedList<T, A>
fn cmp(self: &Self, other: &Self) -> Ordering
impl<T: PartialEq, A: Allocator> PartialEq for LinkedList<T, A>
fn eq(self: &Self, other: &Self) -> boolfn ne(self: &Self, other: &Self) -> bool
impl<T: PartialOrd, A: Allocator> PartialOrd for LinkedList<T, A>
fn partial_cmp(self: &Self, other: &Self) -> Option<Ordering>
impl<T: Send, A: Allocator + Send> Send for LinkedList<T, A>
impl<T: Sync, A: Allocator + Sync> Sync for LinkedList<T, A>
impl<T: fmt::Debug, A: Allocator> Debug for LinkedList<T, A>
fn fmt(self: &Self, f: &mut fmt::Formatter<'_>) -> fmt::Result