use crate::linked_list_algorithms::singly_linked_list::ListNode;
pub fn intersection<T: Clone + Eq + std::hash::Hash>(
head_a: &Option<Box<ListNode<T>>>,
head_b: &Option<Box<ListNode<T>>>,
) -> Option<T> {
use std::collections::HashSet;
let mut set = HashSet::new();
let mut node = head_a.as_ref();
while let Some(n) = node {
set.insert(n.val.clone());
node = n.next.as_ref();
}
let mut node = head_b.as_ref();
while let Some(n) = node {
if set.contains(&n.val) {
return Some(n.val.clone());
}
node = n.next.as_ref();
}
None
}