Rust: Como implementar a lista vinculada?

Eu pensei em mergulhar no Rust implementando uma estrutura e algoritmos muito simples, comecei com uma lista vinculada. Acontece que não é tão simples assim. Este é o meu código até agora:

enum List<T> 
{
    Node(T, ~List<T>),
    Nil
}

impl<T> List<T>
{
    fn new(vector: &[T]) -> List<T> { Nil }

    fn add(&mut self, item: T)
    {
        let tail = self;
        loop
        {
            match *tail
            {
                Node(_, ~ref next) => tail = next,
                Nil => break
            }
        }
        *tail = Node(item, ~Nil);
    }
}

Isso não será compilado porque o próximo não pode ser atribuído à cauda na instrução de correspondência devido a mutabilidade incompatível. Sei que isso pode ser feito facilmente usando ponteiros de coleta de lixo, mas isso acaba com o objetivo educacional do exercício: eu gostaria de saber como fazer isso sem os indicadores Gc ou Rc.

questionAnswers(1)

yourAnswerToTheQuestion