Sobes.tech
Junior — Middle

Qual é a complexidade temporal de adicionar um novo elemento ao final de uma lista ligada simples?

sobes.tech IA

Resposta da IA

A complexidade temporal de adicionar um novo elemento ao final de uma lista ligada simples depende de ter ou não um ponteiro para o último elemento (cauda).

  • Se houver um ponteiro para a cauda, a adição ocorre em O(1), pois pode-se acessar diretamente o último elemento e adicionar um novo.
  • Se não houver ponteiro, é necessário percorrer toda a lista desde a cabeça até o final, o que leva O(n) tempo, onde n é o número de elementos na lista.

Exemplo com ponteiro para a cauda:

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

Aqui, a adição ocorre em tempo constante O(1).