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.