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.