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