container/list.List.Front în Go

Front returnează primul element al listei (sau nil dacă e goală), iar Len numărul de elemente; cu Next parcurgi lista.

Sintaxă
import "container/list"

func (l *List) Front() *Element
func (l *List) Len() int
func (e *Element) Next() *Element

Ce face container/list.List.Front

l.Front() returnează primul element, iar l.Back() ultimul. Pentru o listă goală, ambele returnează nil. Parcurgerea standard este for e := l.Front(); e != nil; e = e.Next() { ... }. De la coadă spre început folosești l.Back() și e.Prev().

l.Len() returnează numărul de elemente. Este o operație instantanee: lista ține minte lungimea, nu numără elementele.

Ce returnează

Front: primul *list.Element sau nil. Len: un int.

Exemple

Exemplul 1: Parcurgere înainte și înapoi

package main

import (
    "container/list"
    "fmt"
)

func main() {
    l := list.New()
    for _, n := range []int{10, 20, 30} {
        l.PushBack(n)
    }
    fmt.Println("Elemente:", l.Len())
    fmt.Println("Primul:", l.Front().Value, "Ultimul:", l.Back().Value)

    suma := 0
    for e := l.Front(); e != nil; e = e.Next() {
        suma += e.Value.(int)
    }
    fmt.Println("Suma:", suma)

    for e := l.Back(); e != nil; e = e.Prev() {
        fmt.Print(e.Value, " ")
    }
    fmt.Println()
}

Rezultat

Elemente: 3
Primul: 10 Ultimul: 30
Suma: 60
30 20 10

Exemplul 2: Lista goală

package main

import (
    "container/list"
    "fmt"
)

func main() {
    l := list.New()
    fmt.Println(l.Len(), l.Front() == nil)
    if e := l.Front(); e != nil {
        fmt.Println(e.Value)
    } else {
        fmt.Println("Lista este goală")
    }
}

Rezultat

0 true
Lista este goală

Greșeli frecvente

  • Citești l.Front().Value fără să verifici lista goală: Front() este nil și programul se oprește cu panic (nil pointer dereference).

Comenzi înrudite

  • container/list.New: Lista dublu înlănțuită din biblioteca standard: tipul list.List și funcția list.New care creează o listă goală.
  • container/list.List.PushBack: PushBack adaugă o valoare la sfârșitul listei, PushFront la început; ambele returnează elementul nou creat.
  • container/list.List.Remove: Scoate elementul e din listă și returnează valoarea lui.