Documentation ¶
Overview ¶
Package list implements a doubly linked list.
To iterate over a list (where l is a *List):
for e := l.Front(); e != nil; e = e.Next() { // do something with e.Value }
Example ¶
package main import ( "fmt" "log" "github.com/smallnest/exp/container/list" ) func main() { // Create a new list and put some numbers in it. l := list.New[int]() e4 := l.PushBack(4) log.Println("Pushed 4 to back") e1 := l.PushFront(1) log.Println("Pushed 1 to front") l.InsertBefore(3, e4) log.Println("Inserted 3 before 4") l.InsertAfter(2, e1) log.Println("Inserted 2 after 1") // 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
Index ¶
- type Element
- type List
- func (l *List[V]) Back() *Element[V]
- func (l *List[V]) Front() *Element[V]
- func (l *List[V]) Init() *List[V]
- func (l *List[V]) InsertAfter(v V, mark *Element[V]) *Element[V]
- func (l *List[V]) InsertBefore(v V, mark *Element[V]) *Element[V]
- func (l *List[V]) Len() int
- func (l *List[V]) MoveAfter(e, mark *Element[V])
- func (l *List[V]) MoveBefore(e, mark *Element[V])
- func (l *List[V]) MoveToBack(e *Element[V])
- func (l *List[V]) MoveToFront(e *Element[V])
- func (l *List[V]) PushBack(v V) *Element[V]
- func (l *List[V]) PushBackList(other *List[V])
- func (l *List[V]) PushFront(v V) *Element[V]
- func (l *List[V]) PushFrontList(other *List[V])
- func (l *List[V]) Remove(e *Element[V]) V
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Element ¶
type Element[V any] struct { // The value stored with this element. Value V // contains filtered or unexported fields }
Element is an element of a linked list.
type List ¶
type List[V any] struct { // contains filtered or unexported fields }
List represents a doubly linked list. The zero value for List is an empty list ready to use.
func (*List[V]) InsertAfter ¶
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.
func (*List[V]) InsertBefore ¶
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.
func (*List[V]) MoveAfter ¶
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.
func (*List[V]) MoveBefore ¶
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.
func (*List[V]) MoveToBack ¶
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.
func (*List[V]) MoveToFront ¶
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.
func (*List[V]) PushBack ¶
PushBack inserts a new element e with value v at the back of list l and returns e.
func (*List[V]) PushBackList ¶
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.
func (*List[V]) PushFront ¶
PushFront inserts a new element e with value v at the front of list l and returns e.
func (*List[V]) PushFrontList ¶
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.