linked-list - 是否可以从标准库的 LinkedList 中弹出某个元素?

标签 linked-list rust

是否可以从标准库的 LinkedList 中弹出某个元素?是否可以对链接列表重新排序,以便所选元素出现在末尾,然后将其弹出?

最佳答案

当然。不过它需要 O(n) 时间,所以这不是一个主意:

use std::collections::LinkedList;

fn main() {
    let mut list: LinkedList<i32> = (1..10).collect();

    let mut tail = list.split_off(5);

    let x = list.pop_back();
    let y = tail.pop_front();

    list.append(&mut tail);

    println!("({:?}, {:?})", x, y); // (Some(5), Some(6))
    println!("{:?}", list);         // [1, 2, 3, 4, 7, 8, 9]
}

使用split_off创建两个列表。这需要 O(n) 时间来遍历列表到所请求的节点。如果索引无效,这也会引起 panic 。

然后,您可以获取第一个列表的尾部 ( pop_back ) 或第二个列表的头部 ( pop_front )。然后,您可以使用 append 将列表拼接在一起。 。这些都需要 O(1) 时间。

关于linked-list - 是否可以从标准库的 LinkedList 中弹出某个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356929/

相关文章:

rust - From/TryFrom 的 Rust 实现是否应该以引用或值为目标?

types - Rust中itertools::process_results()的回调类型签名应该是什么?

javascript - 垃圾收集是否使用给定代码从双向链表中删除已删除的项目?

c - 链表中的节点没有被正确删除?

c - 为什么我的 rust 病比我的C内存操纵慢?

string - 使用 `pop3::POP3Stream::connect` 连接到给定 `host` 的运行时?

rust - Rust 1.3.0 中的猜谜游戏

java - 链接列表和 Try/Catch

java - 向双向链表中添加元素

C++ 不通过其他方法保存更改