pub struct ZigZagIterator {
queue: std::collections::VecDeque<std::vec::IntoIter<i32>>,
}
impl ZigZagIterator {
pub fn new(v1: Vec<i32>,v2: Vec<i32>) -> Self {
let mut queue = std::collections::VecDeque::new();
if !v1.is_empty() {
queue.push_back(v1.into_iter());
}
if !v2.is_empty() {
queue.push_back(v2.into_iter());
}
Self { queue }
}
pub fn next(&mut self) -> Option<i32> {
if let Some(mut iter) = self.queue.pop_front() {
if let Some(val) = iter.next() {
if !iter.as_slice().is_empty() {
self.queue.push_back(iter);
}
return Some(val);
}
}
None
}
pub fn has_next(&self) -> bool {
!self.queue.is_empty()
}
}