Sobes.tech
Junior — Middle

Mekkora az időbeli komplexitás egy új elem hozzáadása egy egyszemélyes láncolt listához?

sobes.tech MI

Válasz az MI-től

Egy egyszerű láncolt lista új elemének végéhez való hozzáadásának időkomplexitása attól függ, hogy van-e a listának mutatója a legutolsó elemre (farokra).

  • Ha van mutató a farokra, akkor a hozzáadás O(1) idő alatt történik, mivel közvetlenül elérhető a legutolsó elem, és hozzá lehet adni egy újat.
  • Ha nincs mutató, akkor végig kell járni az egész listát a fejétől a végéig, ami O(n) időt vesz igénybe, ahol n a lista elemeinek száma.

Példa mutatóval a farokra:

class Node {
    var value: Int
    var next: Node?
    init(value: Int) {
        self.value = value
    }
}

class LinkedList {
    var head: Node?
    var tail: Node?

    func append(_ value: Int) {
        let newNode = Node(value: value)
        if let tailNode = tail {
            tailNode.next = newNode
        } else {
            head = newNode
        }
        tail = newNode
    }
}

Itt a hozzáadás konstans időben, azaz O(1) történik.