如何将元素插入rust中的std::collections::LinkedList库的LinkedList中


use std::collections::LinkedList;
fn main() {
let mut list = LinkedList::<String>::new();

// Looking for something like insert(value, index)
}

我想要一个函数插入给定的值在给定的索引

参见at54321的回答,讨论插入到LinkedList是否是一个好主意(可能不是)。

现在,如果您确定要执行该操作,您可以通过组合LinkedList::split_off,LinkedList::push_backLinkedList::append方法自己编写:

use std::collections::LinkedList;
fn insert_at(l: &mut LinkedList<u8>, idx: usize, val: u8) {
let mut tail = l.split_off(idx);
l.push_back(val);
l.append(&mut tail);
}
fn main(){
let mut l = LinkedList::from([1, 2, 3]);
insert_at(&mut l, 2, 4);

let res: Vec<u8> = l.into_iter().collect();
assert_eq!(res, vec![1, 2, 4, 3]);
}

操场。

如果你想在某个位置(索引)插入一个元素,那么你很可能使用了错误的数据结构。

要做到这一点,唯一的方法是从头开始迭代,并计算元素的数量。然而,这可能会对性能产生负面影响,可能与在Vec中插入元素相当。

使用链表的主要好处是可以快速插入/删除元素。但是如果你需要遍历很多元素来找到一个特定的位置,这可能会比插入本身花费更多的时间。对于向量,插入(而不是在末尾追加)会比较慢,但是通过索引查找元素是一个即时的操作(不需要遍历元素来到达那里)。

最新更新