Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::cell::Cell;
- use std::collections::HashMap;
- pub type Id = i64;
- struct Node<'a> {
- pub id: Id,
- pub next: Cell<Option<&'a Node<'a>>>
- }
- struct RawNode {
- pub id: Id,
- pub next: Id
- }
- fn main() {
- let raw_nodes = vec![
- RawNode { id: 1, next: 2},
- RawNode { id: 2, next: 1}
- ];
- let nodes = build_nodes(&raw_nodes);
- for (id, node) in nodes {
- println!("{} -> {}", id, node.next.get().and_then(|n| Some(n.id)).unwrap_or(-1));
- }
- }
- fn build_nodes<'a>(raw_nodes: &Vec<RawNode>) -> HashMap<Id, Node<'a>> {
- let mut nodes = HashMap::new();
- for raw_node in raw_nodes {
- let node = Node {
- id: raw_node.id,
- next: Cell::new(None)
- };
- nodes.insert(node.id, node);
- }
- for raw_node in raw_nodes {
- let node = nodes.get(&raw_node.id).unwrap();
- let next = nodes.get(&raw_node.next).unwrap();
- node.next.set(Some(next));
- }
- nodes
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement