Data structures 我可以在不移动所有者或不安全的情况下遍历单链接列表吗?

Data structures 我可以在不移动所有者或不安全的情况下遍历单链接列表吗?,data-structures,rust,singly-linked-list,lifetime,Data Structures,Rust,Singly Linked List,Lifetime,单链表可以简单地从尾部创建。但不能从头开始,我试了很多次,代码在这里: 事实上,我希望搜索然后删除链接列表中的一个节点。但我无法使用可变借用指针遍历链表:。我也试了很多次。下面是一个。它展示了一种创建列表的方法,您可以将列表添加到开头和结尾,中间部分可以很好地度量 #[derive(Debug)] struct Node<T> { v: T, next: Option<Box<Node<T>>>, } impl<T>

单链表可以简单地从尾部创建。但不能从头开始,我试了很多次,代码在这里:

事实上,我希望搜索然后删除链接列表中的一个节点。但我无法使用可变借用指针遍历链表:。我也试了很多次。

下面是一个。它展示了一种创建列表的方法,您可以将列表添加到开头和结尾,中间部分可以很好地度量

#[derive(Debug)]
struct Node<T> {
    v: T,
    next: Option<Box<Node<T>>>,
}

impl<T> Node<T> {
    fn new(v: T) -> Node<T> { Node { v: v, next: None } }

    fn push_front(self, head: T) -> Node<T> {
        Node {
            v: head,
            next: Some(Box::new(self)),
        }
    }

    fn push_back(&mut self, tail: T) {
        match self.next {
            Some(ref mut next) => next.push_back(tail), 
            None => self.next = Some(Box::new(Node::new(tail))),
        }
    }

    fn push_after(&mut self, v: T) {
        let old_next = self.next.take();

        let new_next = Node {
            v: v,
            next: old_next,
        };

        self.next = Some(Box::new(new_next));
    }
}

fn main() {
    let mut n = Node::new(2u8);
    n.push_back(3u8);
    let mut n = n.push_front(0u8);
    n.push_after(1u8);

    println!("{:?}", n);
}
#[派生(调试)]
结构节点{
v:T,
下一步:选择,
}
impl节点{
fn new(v:T)->Node{Node{v:v,next:None}
fn向前推(自身,头部:T)->节点{
节点{
五:头,,
下一步:Some(Box::new(self)),
}
}
fn后推(&mut self,尾部:T){
匹配self.next{
一些(参考mut next)=>next。向后推(尾部),
None=>self.next=Some(Box::new(Node::new(tail)),
}
}
fn后推送(多个自身,v:T){
让old_next=self.next.take();
让new_next=节点{
五:五,,
下一个:老欧下一个,
};
self.next=Some(Box::new(new_next));
}
}
fn main(){
设mutn=Node::new(2u8);
n、 推回(3u8);
让mut n=n.向前推(0u8);
n、 在(1u8)之后推_;
println!(“{:?}”,n);
}

重要的是,当我们添加到头部时,我们通过将旧头部作为
自我
来消耗它。这允许我们将它移动到一个
框中,该框将成为新头部的跟随者。删除一个项目是本例的直接扩展,但您需要向前看一点,处理更多边缘情况(例如,如果没有第二个后续项,该怎么办)。

谢谢!我在一段时间前留下了一个camment,但它解决了问题,如果可能的话,删除函数是,在问题本身中发布代码的相关摘录;事实上,如果没有链接,你的问题几乎毫无价值。