Sobes.tech
Junior — Middle

Kuidas määrata kahepoolse ühendatud nimekirja elemendi sisestamise operatsiooni ajakulude keerukus?

sobes.tech AI

Vastus AI-lt

Kahepoolse seotud nimekirja elemendi lisamise operatsiooni ajakulu sõltub sellest, kas meil on näitaja lisamise asukohale:

  • Kui juba on näitaja sellele sõlmele, millele järgneb element, siis lisamine toimub O(1) aja jooksul, kuna tuleb muuta vaid mõningaid näitajaid.
  • Kui esmalt tuleb leida lisamise koht, sõltub otsingu aeg nimekirja suurusest (O(n)), ja ise lisamine — O(1).

Näide lisamisest antud sõlme järel:

 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
}