Я буду выражатся наиболее популярным языком будющего
// Сразу выключаем свет в предидущем вагоне (для простоты пока )
current.prev.isOn = false
// Вот функция для решения
function solve(x,y){
// идём в следующий вагон
const next = x.next
// проверяем включён ли в нём свет
if(next.isOn){
// если включён, то идём в следующем вагон и запомним что для того чтобы вернутся назад нужно пройти ещё один вагон и как бы вызваем эту функцию снова
return solve(next.next,y+1)
} else {
// если выключен, то возвращаемся на столько вагонов назад, сколько мы прошли до этого и проверяем включён ли он
if(vagon(-y-1).isOn === false) {
// если он выключен, то снова как бы вызываем эту функцию, только последний вагон теперь начальный, а текущий - последний (ну мы типа начали идти с конца ) и при этом включаем там свет
vagon(-y-1).isOn = true
solve(vagon(-y).prev, y)
// если он включён, то поздравляем себя и испытываем чувство гордости - мы везде включили свет и количство вагонов которое мы прошли является длиной этого рекурсивного поезда
} else {return y}
}
}
const result = solve(vagon(0),0)
если кто-то будет выключать свет, то мы можем просто включать его по пути пока идём до конца, это не влияет тут не на что