#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DListNode<T: Clone> {
pub val: T,
pub prev: Option<*mut DListNode<T>>,
pub next: Option<Box<DListNode<T>>>,
}
impl<T: Clone> DListNode<T> {
pub fn new(val: T) -> Self {
DListNode {
val,
prev: None,
next: None,
}
}
}
pub fn reverse_doubly<T: Clone>(head: &Option<Box<DListNode<T>>>) -> Option<Box<DListNode<T>>> {
let mut curr = head.as_ref();
let mut prev: Option<Box<DListNode<T>>> = None;
while let Some(node) = curr {
let mut new_node = Box::new(DListNode::new(node.val.clone()));
new_node.next = prev;
prev = Some(new_node);
curr = node.next.as_ref();
}
prev
}