Sobes.tech
Junior — Middle

Ποια είναι η χρονική πολυπλοκότητα της προσθήκης ενός νέου στοιχείου στο τέλος μιας απλής συνδεδεμένης λίστας;

sobes.tech AI

Απάντηση από AI

Η χρονική πολυπλοκότητα της προσθήκης ενός νέου στοιχείου στο τέλος μιας απλής συνδεδεμένης λίστας εξαρτάται από το αν η λίστα έχει δείκτη στο τελευταίο στοιχείο (ουρά).

  • Αν υπάρχει δείκτης στην ουρά, η προσθήκη γίνεται σε O(1), καθώς μπορεί να προσεγγίσει άμεσα το τελευταίο στοιχείο και να προσθέσει νέο.
  • Αν δεν υπάρχει δείκτης, πρέπει να διασχίσει ολόκληρη τη λίστα από την κεφαλή μέχρι το τέλος, που παίρνει O(n) χρόνο, όπου n είναι ο αριθμός των στοιχείων στη λίστα.

Παράδειγμα με δείκτη στην ουρά:

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

Εδώ, η προσθήκη πραγματοποιείται σε σταθερό χρόνο O(1).