list

package
v0.3.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2026 License: MIT Imports: 0 Imported by: 0

Documentation

Overview

Package list implements a doubly linked list.

Example
l := list.New[any]()

e3 := l.PushFront(3)
e4 := l.PushBack(4)
l.InsertAfter(5, e4)
l.InsertBefore(2, e3)

l2 := list.New[any]()
l2.PushBack(1)

l3 := list.New[any]()
l3.PushFront(6)

l.PushBackList(l2)
l.PushFrontList(l3)

head, tail := l.Front(), l.Back()
l.MoveToFront(tail)
l.MoveToBack(head)

// Iterate through list and print its contents.
for e := l.Front(); e != nil; e = e.Next() {
	fmt.Println(e.Value)
}
Output:
1
2
3
4
5
6

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Element

type Element[T any] struct {

	// The value stored with this element.
	Value T
	// contains filtered or unexported fields
}

Element is an element of a linked list.

func (*Element[T]) Next

func (e *Element[T]) Next() *Element[T]

Next returns the next list element or nil.

func (*Element[T]) Prev

func (e *Element[T]) Prev() *Element[T]

Prev returns the previous list element or nil.

type List

type List[T any] interface {
	// Clear clears list.
	Clear() List[T]
	// Len returns the number of elements of list l.
	// The complexity is O(1).
	Len() int
	// Front returns the first element of list l or nil if the list is empty.
	Front() *Element[T]
	// Back returns the last element of list l or nil if the list is empty.
	Back() *Element[T]
	// Remove removes e from l if e is an element of list l.
	// It returns the element value e.Value.
	// The element must not be nil.
	Remove(e *Element[T]) T
	// PushFront inserts a new element e with value v at the front of list l and returns e.
	PushFront(T) *Element[T]
	// PushBack inserts a new element e with value v at the back of list l and returns e.
	PushBack(T) *Element[T]
	// InsertBefore inserts a new element e with value v immediately before mark and returns e.
	// If mark is not an element of l, the list is not modified.
	// The mark must not be nil.
	InsertBefore(T, *Element[T]) *Element[T]
	// InsertAfter inserts a new element e with value v immediately after mark and returns e.
	// If mark is not an element of l, the list is not modified.
	// The mark must not be nil.
	InsertAfter(T, *Element[T]) *Element[T]
	// MoveToFront moves element e to the front of list l.
	// If e is not an element of l, the list is not modified.
	// The element must not be nil.
	MoveToFront(*Element[T])
	// MoveToBack moves element e to the back of list l.
	// If e is not an element of l, the list is not modified.
	// The element must not be nil.
	MoveToBack(*Element[T])
	// MoveBefore moves element e to its new position before mark.
	// If e or mark is not an element of l, or e == mark, the list is not modified.
	// The element and mark must not be nil.
	MoveBefore(e *Element[T], mark *Element[T])
	// MoveAfter moves element e to its new position after mark.
	// If e or mark is not an element of l, or e == mark, the list is not modified.
	// The element and mark must not be nil.
	MoveAfter(e *Element[T], mark *Element[T])
	// PushBackList inserts a copy of another list at the back of list l.
	// The lists l and other may be the same. They must not be nil.
	PushBackList(other List[T])
	// PushFrontList inserts a copy of another list at the front of list l.
	// The lists l and other may be the same. They must not be nil.
	PushFrontList(other List[T])
}

func New

func New[T any]() List[T]

New returns an initialized list.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL