Sobes.tech
Junior — Middle

Jaká je časová složitost přidání nového prvku na konec jednoduše spojeného seznamu?

sobes.tech AI

Odpověď od AI

Časová složitost přidání nového prvku na konec jednoduše spojovaného seznamu závisí na tom, zda seznam obsahuje ukazatel na poslední prvek (ocas).

  • Pokud ukazatel na ocas existuje, přidání probíhá v O(1), protože se může přímo dostat k poslednímu prvku a přidat nový.
  • Pokud ukazatel neexistuje, je třeba projít celý seznam od hlavy až do konce, což zabere O(n) času, kde n je počet prvků v seznamu.

Příklad s ukazatelem na ocas:

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
    }
}

Zde se přidání provádí v konstantním čase O(1).