IMPORTANT: To view this page as Markdown, append `.md` to the URL (e.g. /docs/manual/basics.md). For the complete Mojo documentation index, see llms.txt.
Skip to main content
Version: Nightly
For the complete Mojo documentation index, see llms.txt. Markdown versions of all pages are available by appending .md to any URL (e.g. /docs/manual/basics.md).

LinkedList

struct LinkedList[ElementType: Movable]

A doubly-linked list implementation.

A doubly-linked list is a data structure where each element points to both the next and previous elements, allowing for efficient insertion and deletion at any position.

Parameters​

  • ​ElementType (Movable): The type of elements stored in the list. Must implement the Movable trait.

Implemented traits​

AnyType, Boolable, Copyable (where conforms_to(ElementType, Copyable)), Defaultable, Deinitable (where conforms_to(ElementType, Deinitable)), Equatable (where conforms_to(ElementType, Equatable)), Hashable (where conforms_to(ElementType, Hashable)), Iterable, IterableOwned (where conforms_to(ElementType, Deinitable)), Movable, Sized, Writable (where conforms_to(ElementType, Writable))

comptime members​

IteratorOwnedType​

comptime IteratorOwnedType where conforms_to(ElementType, Deinitable) = _LinkedListIterOwned[ElementType(Deinitable & Movable)]

The owned iterator type for this linked list.

IteratorType​

comptime IteratorType[iterable_mut: Bool, //, iterable_origin: Origin[mut=iterable_mut]] = _LinkedListIter[ElementType(Copyable), iterable_origin]

The iterator type for this linked list.

Parameters​

Methods​

__init__​

def __init__(out self)

Initialize an empty linked list.

Notes: Time Complexity: O(1).

def __init__(out self, var *elements: ElementType, *, __list_literal__: NoneType = None)

Initialize a linked list with the given elements.

Notes: Time Complexity: O(n) in len(elements).

Args:

  • ​*elements (ElementType): Variable number of elements to initialize the list with.
  • ​list_literal (NoneType): Tell Mojo to use this method for list literals.

def __init__(out self, *, copy: Self) where conforms_to(ElementType, Copyable)

Initialize this list as a copy of another list.

Notes: Time Complexity: O(n) in len(elements).

Args:

  • ​copy (Self): The list to copy from.

__deinit__​

def __deinit__(deinit self) where conforms_to(ElementType, Deinitable)

Clean up the list by freeing all nodes.

Notes: Time Complexity: O(n) in len(self).

__bool__​

def __bool__(self) -> Bool

Check if the list is non-empty.

Notes: Time Complexity: O(1).

Returns:

Bool: True if the list has elements, False otherwise.

__eq__​

def __eq__(self, other: Self) -> Bool where conforms_to(ElementType, Equatable)

Checks if the two lists are equal.

Notes: Time Complexity: O(n) in min(len(self), len(other)) compares.

Args:

  • ​other (Self): The list to compare to.

Returns:

Bool: Whether the lists are equal.

__contains__​

def __contains__(self, value: ElementType) -> Bool where conforms_to(ElementType, Equatable)

Checks if the list contains value.

Notes: Time Complexity: O(n) in len(self) compares.

Args:

  • ​value (ElementType): The value to search for in the list.

Returns:

Bool: Whether the list contains value.

deinit_with​

def deinit_with(deinit self, deinit_func: T, /)

Consume the list, deinitializing each element with a closure.

Use this to tear down a LinkedList whose elements are not Deinitable.

Notes: Time Complexity: O(n) in len(self).

Args:

  • ​deinit_func (T): A closure called once per element to deinitialize it.

append​

def append(mut self, var value: ElementType)

Add an element to the end of the list.

Notes: Time Complexity: O(1).

Args:

  • ​value (ElementType): The value to append.

prepend​

def prepend(mut self, var value: ElementType)

Add an element to the beginning of the list.

Notes: Time Complexity: O(1).

Args:

  • ​value (ElementType): The value to prepend.

reverse​

def reverse(mut self)

Reverse the order of elements in the list.

Notes: Time Complexity: O(n) in len(self).

pop​

def pop(mut self) -> ElementType

Remove and return the last element of the list.

Notes: Time Complexity: O(1).

Returns:

ElementType: The last element in the list.

Raises:

If the operation fails.

def pop[I: Indexer & Deinitable, //](mut self, var i: I) -> ElementType

Remove the ith element of the list, counting from the tail if given a negative index.

Notes: Time Complexity: O(n) in len(self).

Parameters:

Args:

  • ​i (I): The index of the element to get.

Returns:

ElementType: Ownership of the indicated element.

Raises:

If the operation fails.

maybe_pop​

def maybe_pop(mut self) -> Optional[ElementType]

Removes the tail of the list and returns it, if it exists.

Notes: Time Complexity: O(1).

Returns:

Optional[ElementType]: The tail of the list, if it was present.

def maybe_pop[I: Indexer & Deinitable, //](mut self, var i: I) -> Optional[ElementType]

Remove the ith element of the list, counting from the tail if given a negative index.

Notes: Time Complexity: O(n) in len(self).

Parameters:

Args:

  • ​i (I): The index of the element to get.

Returns:

Optional[ElementType]: The element, if it was found.

clear​

def clear(mut self) where conforms_to(ElementType, Deinitable)

Removes all elements from the list.

Notes: Time Complexity: O(n) in len(self).

insert​

def insert[I: Indexer](mut self, idx: I, var elem: ElementType)

Insert an element elem into the list at index idx.

Notes: Time Complexity: O(n) in len(self).

Parameters:

  • ​I (Indexer): The type of index to use.

Args:

  • ​idx (I): The index to insert elem at. Must be in the range [0, len(self)].
  • ​elem (ElementType): The item to insert into the list.

extend​

def extend(mut self, deinit other: Self)

Extends the list with another.

Notes: Time Complexity: O(1).

Args:

  • ​other (Self): The list to append to this one.

count​

def count(self, elem: ElementType) -> Int where conforms_to(ElementType, Equatable)

Count the occurrences of elem in the list.

Notes: Time Complexity: O(n) in len(self) compares.

Args:

  • ​elem (ElementType): The element to search for.

Returns:

Int: The number of occurrences of elem in the list.

index​

def index(self, value: ElementType) -> Int where conforms_to(ElementType, Equatable)

Returns the index of the first occurrence of a value in the list.

Notes: Unlike Python's list.index(), this method does not accept start/stop parameters.

Time Complexity: O(n) in len(self).

Args:

  • ​value (ElementType): The value to search for.

Returns:

Int: The index of the first occurrence of the value in the list.

Raises:

ValueError: If the value is not found in the list.

__hash__​

def __hash__(self, mut hasher: T) where conforms_to(ElementType, Hashable)

Hash the elements of this list.

Args:

  • ​hasher (T): The hasher instance.

get_nth​

def get_nth[I: Indexer](ref self, idx: I) -> ref[self_is_mut["element"]] ElementType

Get the element at the specified index.

Notes: Time Complexity: O(n/2) in len(self).

Parameters:

  • ​I (Indexer): The type of index to use.

Args:

  • ​idx (I): The index of the element to get.

Returns:

ref[self_is_mut["element"]] ElementType: A reference to the element at the specified index.

__len__​

def __len__(self) -> Int

Get the number of elements in the list.

Notes: Time Complexity: O(1).

Returns:

Int: The number of elements in the list.

__iter__​

def __iter__(var self) -> _LinkedListIterOwned[ElementType(Deinitable & Movable)] where conforms_to(ElementType, Deinitable)

Consume the linked list and return an iterator over its elements.

Notes: Time Complexity:

  • O(1) for iterator construction.
  • O(n) in len(self) for a complete iteration of the list.

Returns:

_LinkedListIterOwned[ElementType(Deinitable & Movable)]: An iterator that owns the linked list's elements.

def __iter__(ref self) -> _LinkedListIter[ElementType(Copyable), origin_of(self)]

Iterate over elements of the list, returning immutable references.

Notes: Time Complexity:

  • O(1) for iterator construction.
  • O(n) in len(self) for a complete iteration of the list.

Returns:

_LinkedListIter[ElementType(Copyable), origin_of(self)]: An iterator of immutable references to the list elements.

__reversed__​

def __reversed__(ref self) -> _LinkedListIter[ElementType(Copyable), origin_of(self), False] where conforms_to(ElementType, Copyable)

Iterate backwards over the list, returning immutable references.

Notes: Time Complexity:

  • O(1) for iterator construction.
  • O(n) in len(self) for a complete iteration of the list.

Returns:

_LinkedListIter[ElementType(Copyable), origin_of(self), False]: A reversed iterator of immutable references to the list elements.

write_to​

def write_to(self, mut writer: T) where conforms_to(ElementType, Writable)

Write the list to the given writer.

Args:

  • ​writer (T): The writer to write the list to.

write_repr_to​

def write_repr_to(self, mut writer: T) where conforms_to(ElementType, Writable)

Write the repr representation of this LinkedList to a Writer.

Args:

  • ​writer (T): The writer to write to.