container/list.List.PushBack în Go

PushBack adaugă o valoare la sfârșitul listei, PushFront la început; ambele returnează elementul nou creat.

Sintaxă
import "container/list"

func (l *List) PushBack(v any) *Element
func (l *List) PushFront(v any) *Element

Ce face container/list.List.PushBack

l.PushBack(v) adaugă valoarea v la finalul listei, iar l.PushFront(v) la început. Ambele lucrează în timp constant, oricât de lungă ar fi lista.

Ambele returnează *list.Element, elementul nou creat. Dacă îl păstrezi, poți ulterior să-l ștergi (Remove), să-l muți (MoveToFront, MoveToBack) sau să inserezi lângă el (InsertBefore, InsertAfter) fără să mai cauți prin listă.

Cu PushBack + scoatere din față obții o coadă (FIFO); cu PushFront + scoatere din față, o stivă (LIFO).

Parametri

Parametru Descriere
v Valoarea adăugată (orice tip).

Ce returnează

Elementul nou (*list.Element).

Exemple

Exemplul 1: Coadă la ghișeu

package main

import (
    "container/list"
    "fmt"
)

func main() {
    coada := list.New()
    coada.PushBack("Ana")
    coada.PushBack("Mihai")
    coada.PushBack("Ioana")

    for coada.Len() > 0 {
        primul := coada.Front()
        fmt.Println("Servit:", coada.Remove(primul))
    }
}

Rezultat

Servit: Ana
Servit: Mihai
Servit: Ioana

Exemplul 2: Inserare lângă un element păstrat

package main

import (
    "container/list"
    "fmt"
)

func main() {
    traseu := list.New()
    iasi := traseu.PushBack("Iași")
    traseu.PushBack("Bacău")
    traseu.PushFront("Suceava")
    traseu.InsertAfter("Târgu Frumos", iasi)

    for e := traseu.Front(); e != nil; e = e.Next() {
        fmt.Print(e.Value, " -> ")
    }
    fmt.Println("final")
}

Rezultat

Suceava -> Iași -> Târgu Frumos -> Bacău -> final

Greșeli frecvente

  • Adaugi un slice cu l.PushBack(s) și te aștepți la mai multe elemente: tot slice-ul devine un singur element. Pentru o listă întreagă există l.PushBackList(alta).

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.Front: Front returnează primul element al listei (sau nil dacă e goală), iar Len numărul de elemente; cu Next parcurgi lista.
  • container/list.List.Remove: Scoate elementul e din listă și returnează valoarea lui.