Перебираем массив от конца к началу, на каждом шаге создаём узел связного списка - в качестве значения используется текущий элемент массива, а следующим элементом списка будет выступать узел, полученный на предыдущем шаге:
const createList = arr =>
arr.reduceRight((acc, n) => ({
val: n,
next: acc,
}), null);
или
function createList(arr) {
let list = null;
for (let i = arr.length; i--;) {
list = {
val: arr[i],
next: list,
};
}
return list;
}
Другой способ - рекурсия. Если текущий индекс в границах массива, то создаём элемент списка, следующим элементом которого будет результат рекурсивного вызова с индексом, увеличенным на единицу:
const createList = (arr, i = 0) =>
i < arr.length
? ({ val: arr[i], next: createList(arr, i + 1) })
: null;