Sobes.tech
Junior — Middle

Quelle est la complexité temporelle de l'ajout d'un nouvel élément à la fin d'une liste chaînée simple?

sobes.tech IA

Réponse de l'IA

La complexité temporelle de l’ajout d’un nouvel élément à la fin d’une liste chaînée simple dépend de la présence d’un pointeur vers le dernier élément (queue).

  • Si le pointeur vers la queue existe, l’ajout se fait en O(1), car on peut accéder directement au dernier élément et y ajouter un nouveau.
  • S’il n’y a pas de pointeur, il faut parcourir toute la liste de la tête à la fin, ce qui prend O(n) temps, où n est le nombre d’éléments dans la liste.

Exemple avec un pointeur vers la queue :

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

Ici, l’ajout se fait en temps constant O(1).