You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确实现Rust单链表按索引修改指定元素值的功能?

错误原因

  • 第一个编译错误(E0507):你声明的curr_node是不可变共享引用,匹配Link::More(mut node)时会尝试将Box<Node>的所有权从引用后转移到局部变量node,而Box没有实现Copy trait,不允许这种move操作;同时你要修改节点元素,本身就需要持有可变引用。
  • 第二个编译错误(E0597):匹配得到的node是循环内的局部变量,你将&node.next赋值给生命周期更长的curr_node,循环结束后node会被销毁,就会出现悬垂引用。
  • 额外逻辑问题:你现有代码的索引计数逻辑错误,会跳过索引为0的头节点,永远无法修改第一个元素。

修正后的实现

你需要将遍历的指针改为可变引用,模式匹配时直接获取节点的可变借用,同时调整索引判断逻辑:

impl List {
    /// Replaces the element at the specified position in this list with the specified element.
    pub fn set(&mut self, index: usize, elem: i32) -> Result<(), &str> {
        let mut id = 0;
        // 持有可变引用才能修改节点内容
        let mut curr_node = &mut self.head;
        while let Link::More(node) = curr_node {
            if id == index {
                node.elem = elem;
                return Ok(());
            }
            // 移动到下一个节点的可变引用
            curr_node = &mut node.next;
            id += 1;
        }
        // 循环结束仍未找到对应索引,说明越界
        Err("Invalid index")
    }
}

内容的提问来源于stack exchange,提问作者hes_theman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:18:02