Tworzymy połączone ze sobą nodes i wykorzystujemy rekurencję, aby po nich przejść i wykonać jakieś operacje. Do dzieła!
Klasa node:
class Node{
constructor(val){
this.val = val;
this.next = null;
}
}
Tworzymy nodes i łączymy ze sobą:
let one = new Node(1);
let two = new Node(2);
let three = new Node(3);
let four = new Node(4);
one.next = two;
two.next = three;
three.next = four;
Teraz chcemy przejść po wszystkich rekurencyjnie i znanym nam sposobem (tablica-handle-handle-tablica, closure, funkcja wyższego rzędu i funkcja „_”) wykonać rekurencyjne przejście:
function powers(root){
let powers = [];
function _handle(root){
if(root === null)
return;
powers.push(Math.pow(root.val, 2));
_handle(root.next);
}
_handle(root);
return powers;
}
console.log(powers(one));
//[ 1, 4, 9, 16 ]
No i fajnie. Jeden patent na przechodzenie już mamy. Napiszmy coś jeszcze, niech będzie to wylogowanie wartości:
function printLinkedList(root){
function _handle(root){
if(root === null)
return;
console.log(root.val);
_handle(root.next);
}
_handle(root);
}
printLinkedList(one);
//1 2 3 4
Inny, ciekawszy sposób na przejście po połączonych ze sobą węzłach poznamy już wkrótce.