Sobes.tech
Junior — Middle

Ar turite patirties su susietų sąrašų įgyvendinimu ir naudojimu projektuose?

sobes.tech AI

Atsakymas iš AI

Taip, projektuose, parašytuose kalba Go, dažnai įgyvendinamos ir naudojamos susietosios sąrašai, ypač kai reikalingas dinaminis kolekcijų valdymas su dažnais įterpimais ir ištrynimais.

Go standartinėje bibliotekoje yra paketas container/list, kuris įgyvendina dvipusį susietąjį sąrašą. Pavyzdys:

package main

import (
    "container/list"
    "fmt"
)

func main() {
    l := list.New()

    l.PushBack(1)
    l.PushBack(2)
    l.PushFront(0)

    for e := l.Front(); e != nil; e = e.Next() {
        fmt.Println(e.Value)
    }
}

Jei norite patys įgyvendinti susietąjį sąrašą, galite apibrėžti mazgo struktūrą ir metodus įterpimui, šalinimui ir perėjimui:

type Node struct {
    value int
    next  *Node
}

type LinkedList struct {
    head *Node
}

func (l *LinkedList) Insert(value int) {
    newNode := &Node{value: value}
    if l.head == nil {
        l.head = newNode
        return
    }
    current := l.head
    for current.next != nil {
        current = current.next
    }
    current.next = newNode
}

func (l *LinkedList) Traverse() {
    current := l.head
    for current != nil {
        fmt.Println(current.value)
        current = current.next
    }
}

Šis požiūris leidžia lankstesnį sąrašo elementų valdymą, tačiau daugeliu atvejų geriau naudoti paruoštą container/list.