Sobes.tech
Junior — Middle

Jak określa się złożoność czasową operacji wstawiania elementu do listy dwukierunkowej?

sobes.tech AI

Odpowiedź od AI

Złożoność czasowa operacji wstawiania elementu do listy dwukierunkowej zależy od tego, czy mamy wskaźnik na pozycję wstawienia:

  • Jeśli wskaźnik na węzeł, po którym trzeba wstawić element, już istnieje, to wstawienie wykonuje się w czasie O(1), ponieważ wystarczy zmienić kilka wskaźników.
  • Jeśli najpierw trzeba znaleźć pozycję wstawienia, czas wyszukiwania będzie zależał od rozmiaru listy (O(n)), a samo wstawienie — O(1).

Przykład wstawiania po zadanym węźle:

 type Node struct {
    value int
    prev  *Node
    next  *Node
}

func insertAfter(node *Node, newNode *Node) {
    newNode.prev = node
    newNode.next = node.next
    if node.next != nil {
        node.next.prev = newNode
    }
    node.next = newNode
}