Rust: Wie implementiere ich verknüpfte Listen?

Ich dachte, ich würde mich mit Rust beschäftigen, indem ich einige sehr einfache Strukturen und Algorithmen implementierte. Ich begann mit einer verknüpften Liste. Es stellt sich heraus, dass es eigentlich nicht so einfach ist. Das ist mein Code bis jetzt:

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);
    }
}

Dies wird nicht kompiliert, da next in der match-Anweisung aufgrund inkompatibler Veränderlichkeit nicht dem tail zugewiesen werden kann. Ich weiß, dass dies leicht mit müllsammelnden Zeigern gemacht werden kann, aber diese Art von widerspricht dem pädagogischen Zweck der Übung: Ich würde gerne wissen, wie man dies ohne Gc- oder Rc-Zeiger macht.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage