container/list.List.Remove în Go

Scoate elementul e din listă și returnează valoarea lui.

Sintaxă
import "container/list"

func (l *List) Remove(e *Element) any

Ce face container/list.List.Remove

l.Remove(e) scoate elementul e din listă în timp constant și returnează e.Value. Elementul trebuie să aparțină listei l; dacă nu, lista rămâne neschimbată.

După Remove, legăturile elementului sunt șterse, deci e.Next() returnează nil. Când ștergi în timpul parcurgerii, salvează mai întâi next := e.Next() și continuă cu el.

Parametri

Parametru Descriere
e Elementul de scos, din această listă.

Ce returnează

Valoarea elementului scos (any).

Exemple

Exemplul 1: Ștergere în timpul parcurgerii

Pentru fiecare element salvăm întâi următorul, apoi ștergem notele sub 5.

package main

import (
    "container/list"
    "fmt"
)

func main() {
    note := list.New()
    for _, n := range []int{9, 4, 7, 3, 10} {
        note.PushBack(n)
    }
    for e := note.Front(); e != nil; {
        urmator := e.Next()
        if e.Value.(int) < 5 {
            note.Remove(e)
        }
        e = urmator
    }
    for e := note.Front(); e != nil; e = e.Next() {
        fmt.Print(e.Value, " ")
    }
    fmt.Println("- rămase:", note.Len())
}

Rezultat

9 7 10 - rămase: 3

Exemplul 2: Valoarea returnată de Remove

package main

import (
    "container/list"
    "fmt"
)

func main() {
    stiva := list.New()
    stiva.PushFront("pagina 1")
    stiva.PushFront("pagina 2")
    stiva.PushFront("pagina 3")

    inapoi := stiva.Remove(stiva.Front()).(string)
    fmt.Println("Înapoi de la:", inapoi)
    fmt.Println("Acum pe:", stiva.Front().Value)
}

Rezultat

Înapoi de la: pagina 3
Acum pe: pagina 2

Greșeli frecvente

  • Scrii for e := l.Front(); e != nil; e = e.Next() { l.Remove(e) }: după primul Remove, e.Next() este nil și bucla se oprește după un singur element.

Comenzi înrudite

  • 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.PushBack: PushBack adaugă o valoare la sfârșitul listei, PushFront la început; ambele returnează elementul nou creat.
  • container/heap.Fix: Fix reorganizează heap-ul după ce elementul de la indicele i s-a schimbat; Remove scoate elementul de la indicele i.