Sobes.tech
Junior — Middle

Hogyan határozzuk meg a művelet időbeli összetettségét egy kétszeresen láncolt lista elemének beszúrásakor?

sobes.tech MI

Válasz az MI-től

A kétirányú láncolt lista egy elemének beszúrási műveletének időkomplexitása attól függ, hogy van-e mutató a beszúrás helyére:

  • Ha már van mutató a csomópontra, amely után a elemet be kell szúrni, akkor a beszúrás O(1), mivel csak néhány mutatót kell módosítani.
  • Ha először meg kell találni a beszúrás helyét, akkor a keresési idő a lista méretétől függ (O(n)), míg maga a beszúrás O(1).

Példa a megadott csomópont utáni beszúrásra:

 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
}