Tym razem omawiamy metodę pop z już poprzednio omawianego przykładu. Do dzieła.

Oto nasz przedmiot badań:

class SinglyLinkedList{
    constructor(){
        this.head = null;
        this.tail = null;
        this.length = 0;
    }
    
    //(...)

    pop(){
        if(!this.head) return undefined;

        var current = this.head;
        var newTail = current;

        while(current.next){
            newTail = current;
            current = current.next;
        }

        this.tail = newTail;
        this.tail.next = null;
        this.length--;

        if(this.length === 0){
            this.head = null;
            this.tail = null;
        }

        return current;
    }
}

Logika:

  • Jeśli pusty head, nie ma co zwracać
  • Current na head, nowy ogon na current
  • Idziemy dak dlugo aż newTail zacznie pokazywać na przedostatni element
  • Ogon ustawiamy na przedostatni element
  • Next ogona na null
  • Zmniejszamy długość
  • Jeżeli długość 0 to nullujemy head i tail
  • Pod current mamy element popowany, który zwracamy

Moje uwagi:

  • Nigdy nie przypisujemy undefined! Tutaj mamy zwracanie undefined, ale przecież to też może służyć przypisywaniu
  • ! zamiast === null
  • Autor używa klas ES6+ oraz var…
  • current powinien nazywać się toBePopped albo coś takiego
  • Reszta raczej ok