Implementação eficiente de LinkedList imutável (duplo)

Tendo lido esta perguntaImutável ou não imutável? e lendo as respostas às minhas perguntas anteriores sobre a imutabilidade, ainda estou um pouco confuso sobre a implementação eficiente de LinkedList simples que é imutável. Em termos de array, parece ser fácil - copiar o array e retornar uma nova estrutura baseada nessa cópia.

Supostamente temos uma classe geral de nó:

<code>class Node{
    private Object value;
    private Node next;
}
</code>

E class LinkedList baseado no acima, permitindo que o usuário adicione, remova etc. Agora, como podemos garantir a imutabilidade? Devemos recursivamente copiar todas as referências para a lista quando inserimos um elemento?

Eu também estou curioso sobre respostas emImutável ou não imutável? isso menciona a otimização cerain que leva ao log (n) tempo e espaço com a ajuda de uma árvore binária. Além disso, eu li em algum lugar que adicionar um elem à frente é 0 (1) também. Isso me intriga muito, como se não fornecessemos a cópia das referências, então, na realidade, estamos modificando as mesmas estruturas de dados em duas fontes diferentes, o que quebra a imutabilidade ...

Alguma de suas respostas trabalharia em listas duplamente ligadas? Estou ansioso para quaisquer respostas / indicações para quaisquer outras perguntas / solução. Agradeço antecipadamente por sua ajuda.

questionAnswers(3)

yourAnswerToTheQuestion