2017-02-21 8 views

答えて

3

これは、しかし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)時間かかる。インデックスが無効な場合は、これもパニックになります。

これで、最初のリストの末尾(pop_back)または2番目のリストの先頭(pop_front)のいずれかを取ることができます。 appendと一緒にリストをつなげることができます。これらはすべてO(1)時間に作用します。

関連する問題