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.