Sobes.tech
Junior — Middle

Jaka jest złożoność czasowa dodania nowego elementu na koniec jednokierunkowej listy?

sobes.tech AI

Odpowiedź od AI

Złożoność czasowa dodania nowego elementu na koniec jednokierunkowej listy powiązanej zależy od tego, czy lista ma wskaźnik na ostatni element (ogon).

  • Jeśli wskaźnik na ogon istnieje, dodanie odbywa się w O(1), ponieważ można od razu odwołać się do ostatniego elementu i dodać nowy.
  • Jeśli wskaźnika nie ma, trzeba przejść całą listę od głowy do końca, co zajmuje O(n) czasu, gdzie n to liczba elementów na liście.

Przykład z wskaźnikiem na ogon:

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

Tutaj dodanie odbywa się w czasie stałym O(1).