Есть много препятствий для такой структуры, но одно очень актуально: двусвязный список не может быть постоянным.
Логика этого довольно проста: с любого узла в списке вы можете добраться долюбой другой узел.Итак, если бы я добавил элемент X в этот список DL и попытался использовать часть DL, я бы столкнулся с этим противоречием: из узла, указывающего на X, можно добраться до каждого элемента в части (DL), но, с помощьюсвойства двухсвязного списка, то есть из любого элемента части (DL) я могу добраться до узла, указывающего на X. Поскольку часть (DL) должна быть неизменной и частью DL, а так как DL не включает указание узладля X это просто не может быть.
Непостоянные неизменяемые структуры данных могут иметь некоторое применение, но, как правило, это плохо для большинства операций, поскольку их необходимо воссоздавать всякий раз, когда создается производная.
Теперь, есть незначительный вопрос создания взаимно ссылающихся строгих объектов, но это преодолимо.Можно использовать параметры по имени и ленивые значения, или можно сделать как Scala's List: фактически создать изменяемую коллекцию, а затем «заморозить» ее в неизменяемом состоянии (см. ListBuffer и его метод toList).