Sobes.tech
Junior — Middle

Come si determina la complessità temporale dell'operazione di inserimento di un elemento in una lista doppiamente collegata?

sobes.tech AI

Risposta dell'AI

La complessità temporale dell'operazione di inserimento di un elemento in una lista doppiamente collegata dipende dal fatto che abbiamo o meno un puntatore alla posizione di inserimento:

  • Se abbiamo già un puntatore al nodo dopo il quale inserire, l'inserimento avviene in O(1), poiché basta modificare alcuni puntatori.
  • Se dobbiamo prima trovare la posizione di inserimento, il tempo di ricerca dipenderà dalla dimensione della lista (O(n)), e l'inserimento stesso sarà O(1).

Esempio di inserimento dopo un nodo dato:

 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
}