Analizujemy metodę push z projektu lista wiązana w JavaScript. Do dzieła.

Oto klasy node oraz SLL:

class Node{
    constructor(val){
        this.val = val;
        this.next = null;
    }
}

class SinglyLinkedList{

    constructor(){

        this.head = null;
        this.tail = null;

        this.length = 0;
    }
}

Zobaczmy jak autor podszedł do push:

class SinglyLinkedList{

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

    push(val){
        var newNode = new Node(val);

        if(!this.head){
            this.head = newNode;
            this.tail = this.head;
        } else {
            this.tail.next = newNode;
            this.tail = newNode;
        }

        this.length++;

        return this;
    }
}

Logika:

  • utwórz nowy Node o wartości takiej
  • jeżeli lista nie ma elementów to update na head i tail na ten element
  • jeżeli lista ma już elementy to next ogona na nowy element, następnie uczyć nowy element ogonem
  • zwiększ długość, zwróć fluent interface (żeby można było chainować kolejne komendy)

Moje uwagi:

  • Autor używa var i klas ES6+…
  • Warunek negujący/wykluczający na początku – dobrze
  • Blok else może być z uwagi że zwracamy this. W innym wypadku wyrzuciłbym length++ na górę i wywalił blok else dla czytelności
  • Nazwa newNode niezbyt czytelna – powinno byś pushedNode

Prawdziwe jaja będą kilka lekcji później, gdzie autor stworzył pętlę nieskończoną. Na razie źle nie jest. Pop w następnej lekcji.